Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在GUI中动态更新JTextArea_Java_Multithreading_Swing_Jtextarea_Swingworker - Fatal编程技术网

Java 在GUI中动态更新JTextArea

Java 在GUI中动态更新JTextArea,java,multithreading,swing,jtextarea,swingworker,Java,Multithreading,Swing,Jtextarea,Swingworker,我正在尝试动态更新JTextArea,目前的代码如下: Object buttonPressed = e.getSource(); if (buttonPressed.equals(uploadSend)){ new Thread(){ @Override public void run(){ Upload send = new Upload(); send.sendupload(); for (String rec : uploadList.getUploadDetai

我正在尝试动态更新JTextArea,目前的代码如下:

Object buttonPressed = e.getSource();
if (buttonPressed.equals(uploadSend)){
 new Thread(){

   @Override public void run(){
  Upload send = new Upload();
  send.sendupload();
   for (String rec : uploadList.getUploadDetails()) {                 
       uploadDetails.append(rec.toString());
       uploadDetails.append("\n");
   }
}     
 }.start();
}
当按下JButton且JButton不再冻结时,发送上传,但直到整个上传任务完成,JText区域中的文本仍不显示


我已经读过关于SWWWEBOWER的文章,这是我遗漏的内容吗?我将如何在这里实现这一点?

< P>很难知道为什么你的文本区域没有被更新,因为你没有提供足够的上下文来诊断这个问题,考虑提供一个演示你的问题的A。这将减少混乱和更好的响应

但是,如果您想将当前逻辑转换为使用
SwingWorker
,您可以使用类似于

public class UploadWorker extends SwingWorker<List<String>, String> {

    @Override
    protected List<String> doInBackground() throws Exception {
        Upload send = new Upload();
        send.sendupload();
        for (String rec : uploadList.getUploadDetails()) {
            publish(rec);
        }
        return uploadList.getUploadDetails();
    }

    @Override
    protected void process(List<String> chunks) {
        for (String text : chunks) {
            uploadDetails.append(rec);
            uploadDetails.append("\n");
        }
    }

}
if (buttonPressed.equals(uploadSend)){
    UploadWorker worker = new UploadWorker();
    worker.execute();
}

更详细地了解为什么你的文本区域没有被更新,因为你没有提供足够的上下文来诊断问题,考虑提供一个演示你的问题的方法。这将减少混乱和更好的响应

但是,如果您想将当前逻辑转换为使用
SwingWorker
,您可以使用类似于

public class UploadWorker extends SwingWorker<List<String>, String> {

    @Override
    protected List<String> doInBackground() throws Exception {
        Upload send = new Upload();
        send.sendupload();
        for (String rec : uploadList.getUploadDetails()) {
            publish(rec);
        }
        return uploadList.getUploadDetails();
    }

    @Override
    protected void process(List<String> chunks) {
        for (String text : chunks) {
            uploadDetails.append(rec);
            uploadDetails.append("\n");
        }
    }

}
if (buttonPressed.equals(uploadSend)){
    UploadWorker worker = new UploadWorker();
    worker.execute();
}

查看更多详细信息

大多数gui方法都不是线程安全的,因此在另一个线程而不是EDT中更改gui是行不通的
“我读过关于SwingWorker的文章,这就是我所缺少的…”
--它可以帮助您处理Swing后台线程,是的<代码>“…我该如何在这里实现它?”——根据您发布的内容,我不知道。如果它是我的项目,我会阅读并尝试使用它。如果那不起作用,把我的尝试贴在这里。1+到MadProgrammer的答案,如果您遵循他的想法,将帮助您创建自己的正确代码。请注意,您不应该盲目复制和粘贴代码。大多数gui方法都不是线程安全的,因此在另一个线程而不是EDT中更改gui是行不通的
“我读过关于SwingWorker的文章,这就是我所缺少的…”
--它可以帮助您处理Swing后台线程,是的<代码>“…我该如何在这里实现它?”——根据您发布的内容,我不知道。如果它是我的项目,我会阅读并尝试使用它。如果那不起作用,把我的尝试贴在这里。1+到MadProgrammer的答案,如果您遵循他的想法,将帮助您创建自己的正确代码。请注意,您不应该盲目地复制和粘贴代码。谢谢,但我无法运行您的代码。我不知道我的代码的其他部分会有助于描述问题?这不是关于“代码的其他部分会有什么帮助”,而是关于提供一个演示您的问题的示例。它只需要是一个小型的可编译和可运行的示例,重点是复制您遇到的问题having@HovercraftFullOfEels我粘贴了
uploadList.getUploadDetails()
的结果,我假设它是
List
String[]
,但我没有任何代码来证明这一点……此外,我不知道OP想要从中得到什么…猜测,所有猜测…水晶球今天一定是走调了…谢谢,但我无法运行你的代码。我不知道我的代码的其他部分会有助于描述问题?这不是关于“代码的其他部分会有什么帮助”,而是关于提供一个演示您的问题的示例。它只需要是一个小型的可编译和可运行的示例,重点是复制您遇到的问题having@HovercraftFullOfEels我粘贴了
uploadList.getUploadDetails()
的结果,我假设它是
List
String[]
,但我没有任何代码来证明这一点……此外,我不知道OP想要从中得到什么…猜测,所有猜测…水晶球今天一定走调了。。。