2013-08-04 6 views
-1

Хорошо, у меня есть код, который выглядит следующим образом:«GUI в то время как петля»

public class Test 
{ 

private JPanel dummy; 

public checker() 
{ 
    dummy = new JPanel(); 
    dummy.setVisible(false); 

    dummy.addComponentListener(new ComponentAdapter() 
    { 
     @Override 
     public void componentShown(ComponentEvent arg0) 
     { 
      dummy.setVisible(false); 
      runCheck(); 
     }   
    }); 

    runCheck(); 
} 


private void runCheck() 
{ 
    if (a) 
    { 
     //do something 
     dummy.setVisible(true); 
    } 
} 

} 

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

Но мне нужен метод checker(), чтобы вернуть значение, когда цикл нарушен.

ПРИМЕЧАНИЕ: Это симплексная версия кода, я не могу проверить условие a, это не решение.

+0

Я не думаю, что это хорошая картина. Почему бы вам просто не выполнить свою петлю в фоновом потоке? –

+0

Сделайте 'a' static и создайте для него слушателя. Когда 'a' является ложным, слушатель запускает' checker' – bas

+1

. Я собираюсь удвоить то, что сказал @Heuster, - это, на первый взгляд, не является разумным шаблоном. Если бы вы могли, по крайней мере, дать немного лучшее описание того, что вы пытаетесь достичь, образец решения, вероятно, может быть предоставлен. – lscoughlin

ответ

1

Я понял. Я могу использовать secondaryLoop. Я не могу объяснить, как это работает, но это позволяет мне заморозить программу (но EDT), и, пока код заморожен, добавьте события в очередь EDT, которые выполняются немедленно (если EDT не занят чем-либо занятым другое, что в моем случае не является).

Еще на тему: link

3

Используйте SwingWorker для выполнения петли runCheck() в фоновом режиме. Призовите

dummy.setVisible(false); 
worker.execute(); 

Вы можете позвонить setVisible(true) в done(), как показано here для setEnabled().

Смежные вопросы