Java 在GUI中动态更新JTextArea
我正在尝试动态更新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
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想要从中得到什么…猜测,所有猜测…水晶球今天一定走调了。。。