我对使用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
有人可以向我解释发生了什么吗?
答案 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>