表单正在运行时,将执行其他命令

时间:2010-11-13 05:43:25

标签: java forms swing

我编写了一个方法来创建一个表单,然后在main中创建一些其他命令。(java)

package pak2;
import javax.swing.*;

public class form6 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

          JFrame jframe = new JFrame();

          JButton jButton = new JButton("JButton");

          jframe.getContentPane().add(jButton);

          jframe.pack();
          jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          jframe.setVisible(true);

            System.out.println("test***ok");//testtttttttttttttt


    }
}

我想执行“System.out.println(”test *** ok“);”之后,表格将被关闭。  但是当我运行程序时,在我输入表单信息之前,执行其他命令! 表单正在运行时,执行其他命令!我怎么设置它。

4 个答案:

答案 0 :(得分:1)

你对此的看法是错误的。

以下是评论示例:

public class Form2  {

    public static void main(String[] args) {

        final JFrame jframe = new JFrame();

        final JButton jButton = new JButton("JButton");

        /**
         * Once you create a JFrame, the frame will "listen" for events.
         * If you want to do something when the user clicks a button for example
         * you need to add an action listener (an object that implements ActionListener)
         * 
         * One way of doing this is by using an anonymous inner class:
         */
        jButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource().equals(jButton)){
                    jframe.dispose();
                    System.out.println("Button clicked!");
                }

            }
        });

        jframe.getContentPane().add(jButton);
        jframe.pack();
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // displaying the form will NOT block execution
        jframe.setVisible(true);
        System.out.println("test***ok");// testtttttttttttttt
    }
}

答案 1 :(得分:1)

在继续之前,您需要了解有关Swing和Frames的两件重要事项:

  1. 构建组件和调用组件方法必须始终在事件调度线程(EDT)上完成。 This article解释了Swing中单线程规则的原理。请注意,此规则也适用于主线程。使用SwingUtilities.invokeLaterSwingUtilities.invokeAndWait正确执行此操作。
  2. JFrame是独立元素。使一个可见将不会阻止调用线程。但是,如果这是您想要做的,那么使用JDialog。对话框用于阻止和等待用户输入,如果你创建一个模态对话框,使其可见将阻止调用线程(如果你设置父Frame或{{1那么你可以让它保持在最顶层)。一个很好的例子是Dialog(试一试!)除此之外,以及JOptionPane扩展JDialog而不是Dialog的事实,它几乎是相同的,你可以在基础对话框中添加你想要的任何元素。
  3. 一些示例代码:

    Frame

    我希望能回答你的问题。 :)

答案 2 :(得分:0)

在你的代码中,main()函数是调用函数,form6()是被调用函数。从main()函数调用form6()函数后,它返回main()函数。请记住,在执行被调用函数后,控件总是返回到调用函数。

答案 3 :(得分:0)

我不确定你的表单背后的实现是什么,但如果你不希望以后的代码立即执行,你可能需要它来阻止输入,也许使用Scanner?