Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从实例创建者之外的其他类访问方法_Java - Fatal编程技术网

Java 如何从实例创建者之外的其他类访问方法

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();

我创建了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();
            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 
    }
}