Джава.Как ждать? - PullRequest
       2

Джава.Как ждать?

1 голос
/ 12 марта 2012

Я вызываю класс, который создает 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 ]

10 голосов
/ 12 марта 2012

Я думаю, что вы должны использовать JDialog вместо JFrame. Пожалуйста, следуйте этому примеру

5 голосов
/ 12 марта 2012

Что вы, вероятно, ищете, это 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());
        }
    }
}
4 голосов
/ 12 марта 2012

Вместо использования JFrame рассмотрите возможность использования JDialog с модальностью , установленной в значение true.

Когда придет время добавить кнопку «ОК» или что-то в этом роде, посмотрите JRootPane.setDefaultButton()

0 голосов
/ 12 марта 2012

хорошо, как вы знаете, компоненты Swing не являются потокобезопасными, хотя вы можете использовать SwingWorker, чтобы сделать ожидание в фоновом режиме,

Он использует способ потока, но создает новый поток для ожидания в долгосрочной перспективе.операций, в общем, вместо того, чтобы останавливать поток диспетчеризации событий, чтобы пользователь мог взаимодействовать с остальной частью приложения, или остальная часть приложения могла продолжать работать, пока продолжается ожидание.

Конечно, вы должны определитьспособ остановить ожидание.

посмотрите документацию здесь http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

0 голосов
/ 12 марта 2012

Это заставит текущий поток ждать 5 секунд:

try {
    Thread.currentThread().wait(5000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...