一尘不染

每10秒从GUI获取一次数据

java

我想在单击按钮时从GUIinput获取数据,我编写此代码以获取数据,然后进入无限循环

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     while(true){
        try {
            Thread.sleep(10000);
        } catch (InterruptedException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("hello");
        System.out.println(name.getText());

    }

阅读 226

收藏
2020-12-03

共1个答案

一尘不染

我想单击按钮时从GUIinput获取数据

您正在上使用Thread.sleep(...)Event Dispatch Thread (EDT)这将阻止GUI响应事件,直到循环完成为止。

不要在EDT上使用Thread.sleep(…)!

有两种常见的解决方案:

  1. 使用Swing计时器每10秒安排一次事件。
  2. 使用单独的线程。然后,在此线程中,可以使用Thread.sleep(),因为它不会影响EDT。通常,您将SwingWorker每10秒使用一个结果并“发布”。

因此,请查看Swing教程。您将找到有关以下主题:

  1. How to Use Swing Timers
  2. Concurrency in Swing -将解释有关EDT和SwingWorker的信息。
2020-12-03