2012-03-12 3 views
1

Я вызываю класс, который создает jframe и ждет от пользователя ввода некоторых значений. Проблема, которую я испытываю, заключается в том, что мне нужно дождаться этих значений прежде, чем продолжить. Так что код что-то простое, как этотJava. Как подождать?

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. СПАСИБО!

+0

Благодарим за редактирование! – Vagelism

+2

Почему вы не ждете события on click или что-то еще? Ожидание произвольного количества времени для сбора данных из ящика - плохой подход к разработке. – Max

+0

Не можете ли вы использовать прослушиватель textArea или xxx, чтобы пользователь вводил данные и запускал ли соответствующее действие после ввода ввода? – assylias

ответ

10

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

+0

Ссылка мертва, лет. –

-3

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

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

Так что, если пользователю, например, понадобится 6 секунд, чтобы ввести данные, которые мне нужно извлечь позже? – Vagelism

+1

Итак, вы не хотите ждать, вы хотите знать, когда пользователь будет вводить данные? – Kylar

+0

Вам нужно будет добавить какую-то кнопку или прослушиватель событий, чтобы узнать, когда они будут выполнены. Вы должны прочитать учебник Swing. Особенно бит List Listener: http://docs.oracle.com/javase/tutorial/uiswing/events/index.html – Kylar

4

Вместо использования JFrame рассмотрите возможность использования JDialog с номером modality в значение true.

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

0

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

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

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

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

+0

Это то, что я делаю через неделю, читаю о потоках и т. Д. ... Теперь я добился того, чтобы работать с ними только в одном фрейме, но не с родителями и дочерними рамками. Благодарю вас! – Vagelism

+0

хорошо, я думаю, что SwingWorker не относится к этому, потому что он не получает вызов в EDT, а не создает свой собственный поток выполнения, а затем добавляет результат в EDT и возвращает выполнение в EDT. – engma

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()); 
     } 
    } 
} 
Смежные вопросы