【问题标题】:get data from GUI every 10s java每 10 秒从 GUI 获取数据 java
【发布时间】:2026-02-05 10:05:01
【问题描述】:

我想在点击按钮时从 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());

    }

【问题讨论】:

  • 你必须把你的无限循环放在一个单独的线程上——你应该把它变成一个恶魔,这样你的应用程序仍然可以终止。

标签: java swing user-interface


【解决方案1】:

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

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

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

有两种常见的解决方案:

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

所以看看Swing Tutorial。您将找到以下主题:

  1. How to Use Swing Timers
  2. Concurrency in Swing - 将解释 EDT 和 SwingWorker。

【讨论】:

    【解决方案2】:

    我不明白,问题名称说您每 10 秒需要一次数据,然后您说您进入无限循环(???)

    删除while(true)以退出无限循环

    【讨论】:

    • 我需要循环,因为如果我删除它只显示一次数据,我必须每 10 秒读取和更新一次数据
    • 但无限循环不正是您想要的吗?
    • 我有两个文本字段和按钮 Ineed 的 GUI 每隔 10 秒阅读一次并打印数据
    • 你的问题到底是什么?
    • 我在上面写了代码,我运行应用程序并单击按钮,它运行并打印,但在程序没有响应任何命令或单击后,我无法停止 GUI 或程序