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

标签 java compiler-errors scope

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

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/

相关文章:

java - 辅助编译器中的奇怪错误需要声明打开输入流

c++ - 二叉搜索树(BST)返回左 child 被视为函数,不明白

c++ - 使用MinGW编译器编译C++程序时如何增加堆栈大小

javascript 函数柯里化(Currying)将默认参数传递给 vue.js 中的外部函数

javascript - 基本理解题 : objects scope

Java/Tesseract-OCR : Unsatisfied LinkError libtesseract302

java - 如何使用按位运算检查置换的十六进制整数是否与另一个匹配(性能优化)

java file.exists 找不到我的文件

java - 如何在另一个用 @Service 注释的类中调用用 @Component 注释的类中存在的参数化构造函数

java - 计算连续数字