设置JTextField';使用另一个java文件中的文本删除内容
我应该将JTextField UserDisp的文本设置为从登录表单检索到的用户名,但是出现了一个错误。变量用户的值来自输入到登录表单中的用户名 错误显示:“无法从静态上下文引用非静态变量UserDisp” 代码如下:设置JTextField';使用另一个java文件中的文本删除内容,java,swing,oop,login,jtextfield,Java,Swing,Oop,Login,Jtextfield,我应该将JTextField UserDisp的文本设置为从登录表单检索到的用户名,但是出现了一个错误。变量用户的值来自输入到登录表单中的用户名 错误显示:“无法从静态上下文引用非静态变量UserDisp” 代码如下: public static void main(final String user) { //look and feel codes are omitted java.awt.EventQueue.invokeLater(new Runnable() {
public static void main(final String user) {
//look and feel codes are omitted
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
String name = "Welcome "+user+"!";
UserDisp.setText(name);
new MainMenu().setVisible(true);
}
});
}
这里的问题是main方法是静态的,一个很好的解决方法是创建一个实现
Runnable
的类,并让它的构造函数接受登录信息作为参数,
在run方法中,使用获得的值设置文本
public class MyRunnable implements Runnable {
private String user;
public MyRunnable(final String user) {
this.user = user;
}
@Override
public void run() {
// now use the user variable to set the text.
}
}
在你的主要方法中说
java.awt.EventQueue.invokeLater(new MyRunnable(user));
静态变量在类加载到
JVM
时初始化,另一方面,实例变量对于每个实例都有不同的值,它们是在使用new()
操作符或使用反射(如class.newInstance()
创建对象实例时创建的
因此,如果您试图在没有任何实例的情况下访问非静态变量,编译器会抱怨,因为这些变量尚未创建,并且在创建实例并与任何实例关联之前,它们都不存在。所以在我看来,在静态上下文中不允许非静态或实例变量的唯一原因是实例的不存在
因此,您需要创建MainNenu
对象,然后设置用户名文本,然后显示菜单
例如:
MainMenu menu = new MainMenu();
menu.setUserDispNameText(name);
menu.setVisible(true);
阅读更多信息。但是出现了一个错误。什么错误?1) 始终复制/粘贴错误和异常输出。2) 为了更快地获得更好的帮助,请发布一个(最简单的完整且可验证的示例)。