当前位置: 首页 > 知识库问答 >
问题:

为什么睡眠方法会影响/不在面板上显示我更新的JTextArea?

章心水
2023-03-14

我有一扇窗户,上面有各种各样的面板。在一个面板上,我有一个名为dogTalk的JTextArea,我在这里更新它的文本。在用户点击按钮时,我希望文本添加我在SetText中提到的内容。

        System.out.println("We're working");
        dogTalk.setText(dogTalk.getText() + "\nWow bone very wow much thanks bye.");
        try
        {  
            TimeUnit.SECONDS.sleep(4);
        }
        catch ( InterruptedException e1 )
        {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

       System.exit(0);

共有1个答案

姜淇
2023-03-14

与其调用system.exit,不如让应用程序优雅地消失。当没有非守护进程线程仍处于活动状态时,应用程序将终止。守护进程只是一个标志,用于确定如果该线程仍在运行,JVM是否应该终止;如果非守护进程线程正在运行,JVM仍将终止。

也就是说,问题是在事件调度线程上调用sleep

EDT处理Swing和AWT组件的所有更新和呈现,并执行事件侦听器中指定的行为(如ActionListener#ActionPerformed(ActionEvent))。如果您导致它阻塞(通过Hibernate或其他形式的阻塞),它将无法处理更新和呈现。当您调用settext时,EDT需要能够调整文本。你通过强迫它睡觉来阻止它。

Java 8+

public void actionPerformed(ActionEvent e) {
     dogTalk.setText(...);
     new Thread(() -> {
          TimeUnit.SECONDS.sleep(4);
          frame.dispose();
     }).start();
}

在Java8之前

public void actionPerformed(ActionEvent e) {
    dogTalk.setText(...);
    new Thread(new Runnable() {
        public void run() {
            TimeUnit.SECONDS.sleep(4);
            frame.dispose();
        }
    }).start();
}
 类似资料:
  • 如果我直接在构造函数中添加面板,它可以正常工作,但在控制器中则不行。当我在菜单上点击“Reservas”或“Contabilidad”选项之一时,我想更改显示的面板并查看其他内容。 这是我的观点 } 这是我的控制器 } panel对象只有一个jlabel,其中有一个hello要测试

  • 问题内容: 我有如下代码: 但是,不是在每次调用setText时在循环的每次迭代后更新文本区域,而是仅在完成所有任务运行后才更新文本。为什么会发生这种情况,我该如何解决? 问题答案: 您可能正在使用Swing线程,该线程正在等待代码执行才能更新UI。尝试为该循环使用单独的线程。

  • 问题内容: 我有一个嵌套的字典,我们称它为字典d。该词典的键是一个整数,每个键的值是另一个词典。我正在python 2.7上尝试一个简单的代码来更新一个外键的值,但似乎它正在更新外键的ALL的值。 希望这些代码将使其更易于理解。这是我的意见。 然后是输出: 您会看到,我只为d [0] [‘mean’]分配了‘1’,但是d [1] [‘mean’]也有所更新。如果我增加d键的数量,它将只更改所有d键

  • 问题内容: 这段代码: 使我的计算机挂起5秒钟,然后打印出0-9,而不是每半秒打印一次数字。难道我做错了什么? 问题答案: ,默认情况下,在内部打印到并缓冲要打印的输出。 通常是否由文件确定输出是否被缓冲,但是如果关键字参数为true,则将强制刷新流。 在版本3.3中更改:添加了关键字参数。 报价文件, 交互式时,标准流是行缓冲的。否则,它们像常规文本文件一样被块缓冲。 因此,就您而言,您需要像这

  • 来自django。数据库导入模型 类抱怨(模型。模型): “”“您需要表单提交时的成功视图。这将在用户提交表单后呈现感谢消息。然后在URL.py上,导入成功视图,然后添加路径('success',successView,name='success'),”“”def successView(请求):返回呈现(请求,“tem/success.html”)

  • choice5是一个JComboBox 从choice5中选择项目时 被称为(编辑:对于我可以选择的每个项目,我可能有一个不同的jtable我想要显示) 编辑(SSCCE): MyTableModel