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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_Swing_Jframe_Actionlistener - Fatal编程技术网

Java 等待按钮单击以继续程序

Java 等待按钮单击以继续程序,java,swing,jframe,actionlistener,Java,Swing,Jframe,Actionlistener,一般来说,我对GUI是新手。我想做一个,它要求用户输入。之后,应在对象中进一步处理此输入 这是我的objectClass public class AnObject { private String property; public AnObject(){} public String getProperty() {return property;} public void setProperty(String property)

一般来说,我对GUI是新手。我想做一个,它要求用户输入。之后,应在对象中进一步处理此输入

这是我的
objectClass

public class AnObject {
        private String property;
        public AnObject(){}
        public String getProperty() {return property;}
        public void setProperty(String property) {this.property = property;}
}
My
MainClass
带有main和
gui
方法:

public class MainClass {
        public static void main(String[] args) {
            AnObject anObject = new AnObject();
            gui(anObject);
            System.out.println(anObject.getProperty()); //always null
        }

        public static void gui(AnObject anObject){
            JFrame frame = new JFrame();
            JPanel panel = new JPanel();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            JButton button = new JButton("ok");
            JTextField textField = new JTextField(20);
            panel.add(button);
            panel.add(textField);
            frame.add(panel);
            frame.setVisible(true);
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    anObject.setProperty(textField.getText());
                    System.out.println(anObject.getProperty()); //Input
                    frame.dispose();
                }
            });
        }
}
我的输出总是

null
//input from gui

按这个顺序。我想我的输入速度太慢了,我怎么能让程序等我呢?

你必须让方法等待-所有方法完成后都会返回

一旦您设置了gui(即添加按钮),这个(gui)将返回

因此,添加一个

while(frame.isDisplayable()) try { Thread.sleep(1000); } catch (Exception e) {}
在方法的末尾。这样,当帧被释放时(输入值并按下按钮后),方法将退出

然而,这种方式是危险的编程——没有明显的原因而搁置一种方法


但是,如果这是您想要的,这就是您必须做的。

不需要在
main()
中输入最后一行。调用操作侦听器时,打印输出已经发生。监听器也是进一步处理输入(或者更好地调用函数)的地方。将
JFrame
改为
JOptionPane
(或模式对话框)。然后,代码将等待对话框或选项窗格关闭。有关使用
JOptionPane
的示例,请参阅。