我对使用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

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

最佳答案

应当从qGenGUI类的上下文中访问workingDirLabel。最简单的方法是在qGenGUI构造函数或“start”方法中启动所有工作。 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,以了解类/实例的基础,“静态”的含义(以及非静态成员的工作方式)以及在上下文/实例“内部”的含义。

10-08 08:28