gpt4 book ai didi

java - 为什么我不能从 Java 中的内部 Thread 类访问外部类?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:43 26 4
gpt4 key购买 nike

我有这些类及其嵌套类(请转到相关行):

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Client {
private static final int FRAME_WIDTH = 500, FRAME_HEIGHT = 500;

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new ClientPanel());
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
}

@SuppressWarnings("serial")
private static class ClientPanel extends JPanel {
JTextArea textArea;
JTextField textField;
JButton goButton;

private ClientPanel() {
setLayout(new BorderLayout());

textArea = new JTextArea();
add(textArea, BorderLayout.NORTH);

textField = new JTextField();
add(textField, BorderLayout.CENTER);

goButton = new JButton("Go");
add(goButton, BorderLayout.PAGE_END);
goButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.append("Go button pressed. Text in field: "
+ textField.getText() + "\n ");
}
});
}

private static class GetBinaryThread extends Thread {
private String data;

public GetBinaryThread(String data) {
this.data = data;
}

public void run() {
try {
ClientPanel.this.textArea.append(", recieved" + data);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

编译器在线报错:

ClientPanel.this.textArea.append(", recieved" + data);

No enclosing instance of the type Client.ClientPanel is accessible in scope

如何访问外部类的 JTextArea?

最佳答案

您的嵌套类是一个静态嵌套类:

private static class GetBinaryThread extends Thread

因此它没有封闭实例。

摆脱static,然后它将成为一个内部类,并引用ClientPanel 的一个实例。请注意,当您创建 GetBinaryThread 的实例时(您在显示的代码中没有),您需要有一个 ClientPanel 引用以隐式传递给构造函数作为上下文。

关于java - 为什么我不能从 Java 中的内部 Thread 类访问外部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32018139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com