0

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

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

//....
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 进行测试,效果很好!)
谢谢

4

1 回答 1

1

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

在事件侦听器中执行的代码在 EDT 上执行。问题是长时间运行的任务阻塞了 Swing EDT。所以 GUI 永远没有机会重新绘制自己。

阅读有关并发的 Swing 教程中的部分以获取更多信息和解决方案。基本的解决方案是为长时间运行的任务创建一个单独的线程。

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

于 2010-10-28T20:18:11.583 回答