Java 这门课怎么叫?

Java 这门课怎么叫?,java,Java,我有一个调用称为MainFrame的定制JFrame类的主类 public class App { public static MainFrame mf; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { MainFrame mf = new MainFrame(Workers);

我有一个调用称为MainFrame的定制JFrame类的主类

public class App {

public static MainFrame mf;

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
             MainFrame mf = new MainFrame(Workers); //jFrame
        }   
    }); 
}

public static void foo(String s){ //invoked by another class
    mf.validate();

}       
}

在run()外部调用mf的方法返回空值。如何在大型机内部调用方法?

您只需在方法范围之外声明类,以便以后使用

MainFrame mf;

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        mf  = new MainFrame(Workers); //jFrame
    }   
});

这是因为一个叫做范围的东西。您的变量仅在声明它的括号中有效。之后,垃圾收集器会自动将其删除。

您已经声明了
大型机mf外部

因此,请替换此语句

MainFrame mf = new MainFrame(Workers);


为了访问run()外部的对象,请在方法外部声明类。像这样:

MainFrame mf;

// following actions...

你们真是太快了。太谢谢你了,我快疯了。它甚至不会让我这么快接受答案。A+作为旁注,如果您可以避免它,那么您不希望共享可变状态,尤其是
静态
变量中的任何状态。如果可能的话,将它交给需要的实例(注意这仍然是危险的,但至少你已经明确选择了与谁共享它)。
MainFrame mf;

// following actions...