Java的。怎么等?

时间:2012-03-12 14:23:21

标签: java swing

我调用一个创建jframe的类,并等待用户输入一些值。 我遇到的问题是我需要等待这些值才能继续。 所以代码就像这样简单

Jframe frame= new jframe(); //here I want the program to show the frame and then wait till   it will be disposed
// I want a pause here 
System.out.println(frame.getvalue);

直到现在我唯一可以做的就是冻结框架,甚至可以完全出现。 有帮助吗? 请保持简单,因为我不熟悉Java。 谢谢!

5 个答案:

答案 0 :(得分:10)

我认为你应该使用JDialog而不是JFrame。请按照example

进行操作

答案 1 :(得分:5)

您可能正在寻找的是JOptionPane。这是一个阻塞例程,仅在用户输入某个值后返回,如下所示:

public class test
{
  public static void main ( String args[] )
  {
      String input = JOptionPane.showInputDialog(null, "Thing: ",
                    "Enter Stuff", JOptionPane.OK_CANCEL_OPTION);

      System.out.println ( "won't reach until got input");
      System.out.println ( "My value: " + input );
  }
}

关于它的好处是你可以添加组件,所以你不仅限于一个输入字段,但它仍然是阻塞的。以下内容将向框架中添加两个JTextField:

public class test
{
    public static void main ( String args[] )
    {
        JTextField input_box = new JTextField(7);
        JTextField input_box2 = new JTextField(7);

        JComponent[] inputs = new JComponent[] {
            new JLabel("Thing 1:"),
            input_box,
            new JLabel("Thing 2:"),
            input_box2 };

        int rval = JOptionPane.showConfirmDialog(null, inputs,
                    "Enter Stuff", JOptionPane.OK_CANCEL_OPTION);

        if ( rval == 0)
        {
           System.out.printf ("%s and %s!", input_box.getText(),
                                         input_box2.getText());
        }
    }
}

答案 2 :(得分:4)

不要使用JFrame,而应考虑使用JDialog并将modality设置为true。

当需要添加“确定”按钮或类似内容时,请查看JRootPane.setDefaultButton()

答案 3 :(得分:0)

你知道swing组件不是线程安全的,虽然你可以使用SwingWorker在后​​台等待,

它使用线程方式,但它通常为等待的长期操作创建一个新线程, 而不是暂停事件调度线程,以便用户可以与应用程序的其余部分进行交互,或者等待的其余部分可以继续工作。

当然,你必须为它定义一种方法来阻止等待。

在此处查看其文档http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

答案 4 :(得分:-3)

这将导致当前线程等待5秒钟:

try {
    Thread.currentThread().wait(5000);
} catch (InterruptedException e) {
    e.printStackTrace();
}