如何更新自己的GUI,这也是主类?

时间:2015-04-11 20:10:23

标签: java swing oop compiler-errors

我对使用java制作桌面应用程序有点新意,我在netbeans中创建了一个项目并创建了JFrame作为主类。

这是代码:

public class qGenGUI extends javax.swing.JFrame {

static funcs fcs;
static String workingDir;

public qGenGUI() {
    initComponents();
    fcs = new funcs();
    workingDir = fcs.getSetting("workingDir", "none");
}

public static void main(String args[]) {

    /* Set the Nimbus look and feel */
   //Removed part as I assume it's irrelevant.

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new qGenGUI().setVisible(true);
            workingDirLabel.setText(workingDir);
        }
    });
}

我正在尝试更新GUI,但它说:

non-static variable workingDirLabel cannot be referenced from a static context

有人可以向我解释发生了什么吗?

1 个答案:

答案 0 :(得分:1)

workingDirLabel应该从 qGenGUI类的上下文中访问。最简单的方法是在qGenGUI构造函数或'start'方法中开始 inside run方法在EDT上运行,但不在 qGenGUI类实例的上下文中。

最简单的改变是:

public qGenGUI() {
    initComponents();
    fcs = new funcs();
    workingDir = fcs.getSetting("workingDir", "none");

    // in a qGenGUI instance
    setVisible(true);
    workingDirLabel.setText(workingDir);
}

public static void main(String args[]) {
    // not in any instance
    java.awt.EventQueue.invokeLater(new Runnable() {           
        public void run() {
            // in a Runnable instance, but NOT within qGenGUI
            new qGenGUI();
        }
    });
}

现在从func和workingDir变量中删除static修饰符。

我建议阅读Lesson: Classes and Objects以了解类/实例的基础知识,“静态”意味着什么(以及非静态成员的工作方式),以及在“上下文/实例”中的内容。< / p>