我对使用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,以了解类/实例的基础,“静态”的含义(以及非静态成员的工作方式)以及在上下文/实例“内部”的含义。