繁体   English   中英

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

[英]Why can't I access outer class from inner Thread class in Java?

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

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);

在范围内无法访问Client.ClientPanel类型的封闭实例

我怎样才能访问外部类的JTextArea?

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

private static class GetBinaryThread extends Thread

因此它没有封闭的实例。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM