当前位置: 首页 > 面试题库 >

实时输出到jTextArea

诸葛雨泽
2023-03-14
问题内容

我有一些代码需要花几分钟的时间来处理,它必须为长数组中的每个字符串连接到Web,每个字符串都是一个url。我想这样做,以便每次连接时都应刷新jtextarea,以使用户不会盯着看起来冻结20分钟的空白页。或需要多长时间
这是我尝试但没有成功的示例:

try {
            ArrayList<String> myLinks = LinkParser.getmyLinksArray(jTextArea1.getText());
            for (String s : myLinks) {
                jTextArea2.append(LinkChecker.checkFileStatus(s) + "\n");
            }
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(jTextArea1, "Parsing Error", "Parsing Error", JOptionPane.ERROR_MESSAGE);
            Logger.getLogger(MYView.class.getName()).log(Level.SEVERE, null, ex);
        }

问题答案:

问题是您需要异步执行计算。您应该创建一个执行计算的后台线程,然后使用SwingUtilities.invokeLater更新JTextArea。

final ArrayList <String> myLinks = // ...
(新线程()
{
    public void run(){
        对于(String s:myLinks){
            尝试{
               最终的String结果= LinkChecker.checkFileStatus(s)+“ \ n”;
               SwingUtilities.invokeLater(new Runnable(){ 
                    public void run(){    
                      jtextArea2.append(result);
                    }
                });
             }捕获(IOException错误){
                //处理错误
             }
        }
    }
})。开始();

编辑
已经指出,JTextArea的append函数实际上是线程安全的(不同于大多数Swing函数)。因此,对于这种情况,不需要通过invokeLater更新它。但是,您仍然应该在后台线程中进行处理,以便允许GUI更新,因此代码为:

final ArrayList <String> myLinks = // ...
(新线程()
{
    public void run(){
        对于(String s:myLinks){
            尝试{
               jtextArea2.append(LinkChecker.checkFileStatus(s)+“ \ n”);
             }捕获(IOException错误){
                //处理错误
             }
        }
    }
})。开始();

但是,几乎所有其他修改Swing对象的操作都需要使用invokeLater(以确保修改发生在GUI线程中),因为几乎所有的Swing函数都不是线程安全的。



 类似资料:
  • 问题内容: 我有一些代码需要花几分钟的时间来处理,它必须为长数组中的每个字符串连接到Web,每个字符串都是一个url。我想这样做,以便每次连接时都应刷新jtextarea,以使用户不会盯着看起来冻结20分钟的空白页。或需要多长时间 这是我尝试但没有成功的示例: 问题答案: 问题是您需要异步执行计算。您应该创建一个执行计算的后台线程,然后使用SwingUtilities.invokeLater更新J

  • 本文向大家介绍PHP实现即时输出、实时输出内容方法,包括了PHP实现即时输出、实时输出内容方法的使用技巧和注意事项,需要的朋友参考一下 老生长谈了。。纯备忘 对于运行时间较长的PHP程序来说可能都需要即时输出内容来查看运行情况。 例, 按例子测试,达到了PHP即时实时输出内容的效果。

  • 问题内容: 我正在使用NSTask运行rsync,并且希望状态显示在窗口内滚动视图的文本视图中。现在我有这个: 这就是我有关传输的一些统计信息,但我想实时获取输出,例如在Xcode中运行该应用程序并将其放入文本视图时所打印的内容。有没有办法做到这一点? 问题答案: 您可以使用通知从管道异步读取。这是一个演示其工作原理的简单示例,希望可以帮助您入门: 而是可以将接收到的字符串附加到文本视图中。 上面

  • 我有将adb logcat的输出打印到wx中的代码。TextArea框,这一切都很好,单击按钮,logcat打印出来,当电话点击时,它打印出来的更多,一切都很正常。toolsDir和pkgName都是字符串。 然而,我已经修改了这段代码,只打印出特定应用程序的日志,这是使用windows“findstr”函数完成的,adb logcat|findstr myApp。下面的代码最初有效,但后来停止,

  • 问题内容: 我只是在Linux服务器上试验PHP 。这是一个非常酷的功能,到目前为止,我真的很喜欢它。有没有办法查看命令运行时正在进行的实时输出? 例如,如果运行时正在ping通目标地址,则每次ping通时,都使用PHP显示结果吗?那可能吗? 我希望看到缓冲区正在运行时进行实时更新。也许不可能,但肯定会很好。 这是我正在尝试的代码,我尝试过的所有方式都始终在命令完成后显示结果。 我尝试过将零件循环

  • 问题内容: 是否可以实时获取PL / SQL的输出?我有一个相当大的程序包,可以运行一个多小时,我想看看该程序包在特定时间的位置。 无论如何,我目前使用一个日志表来执行此操作,该表每次运行都充满了数百个日志描述,我很好奇这是否可行。 谢谢! 问题答案: 我不知道这是否正是您想要的,但是我使用dbms_application_info.set_module来查看我的包在哪里。 出现查询将向您显示该过