Java Как продвигать GUI
Итак, у меня есть кнопка, которая открывает цикл while, затем весь мой графический интерфейс останавливается до тех пор, пока не закончится цикл while, при этом будет сказано, как мне продвигать мой GUI для обновления каждую секунду или около того?
JButton Test= new JButton();
Test.setText("Test");
Test.setSize(230, 40);
Test.setVisible(true);
Test.setLocation(15, 290);
Test.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
int x = 0;
while(x<500){
x++
});
3 ответа
Использование ExecutorService
учебный класс
Test.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ExecutorService es = Executors.newCachedThreadPool();
es.submit(new Runnable() {
@Override
public void run() {
int x = 0;
while (x < 500) {
x++;
}
}
});
}
});
Большая идея в том, что ваш GUI зависает, потому что вы выполняете тяжелую обработку в потоке, ответственном за рисование GUI; решение состоит в том, чтобы делегировать вычисления или любые обработки, которые могут занять время для потока, который будет выполняться в фоновом режиме. https://docs.oracle.com/javase/tutorial/uiswing/concurrency/
Это очевидно, потому что объекты Swing не являются потокобезопасными, и поэтому вы получаете SwingUtilities.invokeLater()
, что позволяет выполнить задачу в более поздний момент времени.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
int x = 0;
while(x<500){
x++
}
}
});