是否缓冲了jtextarea.settext()方法?

时间:2010-10-28 19:27:52

标签: java applet java-io

我不是一个java开发人员,但我需要编写一个小程序来通过ftp上传文件 (实际上,我是一名网络开发人员)。除反馈消息的显示方式外,一切正常。让我用一个例子来解释:

如果我在一个方法(由点击事件控制)中写出这样的东西

//....
myJpanel.setText("Connecting to remote server");

//actually, it's surrounded by try-catch statement
myFtpObject.connect(); //this is taken from a third part package 
myJpanel.setText("Connected")

当我尝试运行此代码时,连接已设置(在连接之后我上传文件没有问题),但在Jpanel myJpanel 内我立即读取“已连接”(尽管需要几秒钟)连接)我从来没有看到“连接到远程服务器”字符串。

听起来像Jpanel setText方法以某种方式缓冲 如何实时显示消息?

(我已经尝试过System.out.println进行测试,效果很好!)
感谢

1 个答案:

答案 0 :(得分:1)

  

如果我在一个方法(由点击事件控制)中写出类似的东西

在事件监听器中执行的代码在EDT上执行。问题是长时间运行的任务阻止了Swing EDT。因此GUI永远不会有机会重新绘制自己。

阅读Concurrency上Swing教程中的部分,了解更多信息和解决方案。基本解决方案是为长时间运行的任务创建一个单独的线程。

这也是System.out.println(..)工作的原因,因为它在不同的线程上执行。