如何将对象传递给工具并传递出本地对象?

如何将对象传递给工具并将本地对象传递给外部的对象?我认为SwingUtilities.invokeLater对于Swing对象来说是必要的,对吗?
  Sensors sens = new Sensors();

  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    GUI application = new GUI(sens);
    application.getJFrame().setVisible(true);
   }
  });

  SMS sms = new SMS(application);
这是我尝试解决问题,但我得到一个可以访问类型GUI的封闭实例。必须使用GUI类型的封闭实例限定分配(例如x.new A(),其中x是GUI的实例)。问题。
// in main
Sensors sens = new Sensors();
GUI application = null;
SwingUtilities.invokeLater(new GUIthread(sens , application));
SMS sms = new SMS(application);


//a class inside GUI.java , but not inside GUI class
class GUIthread implements Runnable{
  Sensors s;
  GUI g;
  public GUIthread(Sensors s , GUI g){
   this.s = s;
   this.g = g;
  }

  @Override
  public void run() {
   // TODO Auto-generated method stub
   g = new GUI(s);
   g.getJFrame().setVisible(true);
  }
 }
源代码     
已邀请:
当您尝试在未指定(或暗示)封闭类的实例的上下文中创建非静态内部类的实例时,会出现此问题。 由此,我推断出你已​​经将一个类声明为非静态内部类;例如这样的事情:
public class Outer {
    ...
    public class Inner {
        public Inner() {
           ...
        }
        ...
    }
    ...
}
如果您现在尝试使用
new Inner()
在其他代码中创建
Inner
的实例,您将收到类似于您所看到的编译错误。 您可以执行以下两项操作之一来“修复”问题: 如果您将
public class Inner {
更改为
public static class Inner {
,则可以使用当前正在执行的
new Inner()
。但这意味着
Inner
的代码无法访问封闭类的(最终)实例变量;即
Outer
。 如果您不想将
Inner
更改为静态类,则需要按如下方式对其进行实例化:
Outer outer = ...
...
Inner inner = outer.new Inner();  // qualified creation
跟进   任何使用静态类调用swing的下行? 只有我上面提到的那个。   那么,所有的实例化都发生在外部构造函数中?对? 不可以。上面“合格创建”示例中的代码可以出现在可以访问
Inner
类的任何地方。因为我们宣布它为
public
...... 如果在构造函数(或实例方法)中为
Outer
实例化
Inner
,则可以使用
new Inner()
。封闭的
Outer
实例与
this
相同。     
尝试
final Sensors sens = new Sensors();
代替。     
简单,声明参考最终,它将由匿名类代码看到。     
我同意Zach并怀疑GUIthread是一个内部类。如果是这样,你可能会把它变成一个独立的类或静态的内部类,但是如果没有更多的信息并且没有实际的错误信息,很难知道这是否是真正的解决方案。     

要回复问题请先登录注册