Java 如何从实例创建者之外的其他类访问方法
我创建了3个java文件:main.java、GUI.java、Serial.java 大体上,我创建了最后两个java文件的实例。 我可以从gui中调用方法,也可以从Main中调用serial方法。 我无法从实例gui和串行Main外部调用方法Java 如何从实例创建者之外的其他类访问方法,java,Java,我创建了3个java文件:main.java、GUI.java、Serial.java 大体上,我创建了最后两个java文件的实例。 我可以从gui中调用方法,也可以从Main中调用serial方法。 我无法从实例gui和串行Main外部调用方法 package main; public class Main { public static void main(String[] args) { GUI gui = new GUI();
package main;
public class Main {
public static void main(String[] args) {
GUI gui = new GUI();
gui.setVisible(true);
Serial serial = new Serial();
serial.getPorts();
fillList();
}
public void fillList () {
gui.setList("hoi");
}
}
为什么会这样?如何从方法填充列表从gui调用方法?
感谢您的帮助。实例只存在于它们声明的方法中,在本例中是构造函数。解决这个问题的一种常见方法是在类中声明一个
字段
,并在构造函数(或其他方法)中指定该字段的值。尝试:
gui
和serial
是局部变量,因此它们不存在于main()
方法之外。我理解原因,谢谢!现在,如果希望类变量位于方法之外,请使用类变量。好建议!所以这个“字段”允许我访问类中的变量。假设我想做一个gui.JComboBox.addItem(text);我只是在我的例程中声明一个字段,并且可以访问这个对象?我说的对吗?是的,该字段允许类中的所有方法访问该变量。在不了解GUI
类的内部结构的情况下,它看起来好像JComboBox
是GUI
上的一个字段,因此只要该字段声明为public
,在Main
构造函数中创建的GUI
实例就可以访问GUI.JComboBox
字段。然后,GUI
类中的JComboBox
字段似乎有一个名为addItem
的方法(我可以看出这是一个方法,因为您使用参数调用它)。同样,如果addItem
方法是public
,那么JComboBox
和gui
应该可以访问该方法。换句话说,根据隐私设置的声明方式,本地gui
字段应该可以访问JComboBox
(以及它的所有字段和方法)以同样的方式,它可以访问第15行的setList
。这适用于GUI
类中声明的所有public
字段和方法。我尝试了您的方法(复制/粘贴),但Netbeans在“GUI=new GUI();”行中显示错误接下来呢。错误表示“不能从静态上下文引用非静态变量”。GUI构造函数是公共的,init方法是私有的。这就是它显示错误的原因吗?啊,我错过了你的main
方法是static
。错误是说gui
字段是非静态的,但我们试图从static
main
方法引用它。我会更新我的答案。
package main;
public class Main {
// private GUI gui; // replaced this line with the below. See comment 5
private static GUI gui; // this is the new field declaration
public static void main(String[] args) {
gui = new GUI(); // note I removed the class declaration here since it was declared above.
gui.setVisible(true);
Serial serial = new Serial();
serial.getPorts();
fillList();
}
public void fillList () {
gui.setList("hoi"); // now this method has access to the gui field
}
}