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++
      }
    }
});
Другие вопросы по тегам