我不是一个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进行测试,效果很好!)
感谢
答案 0 :(得分:1)
如果我在一个方法(由点击事件控制)中写出类似的东西
在事件监听器中执行的代码在EDT上执行。问题是长时间运行的任务阻止了Swing EDT。因此GUI永远不会有机会重新绘制自己。
阅读Concurrency上Swing教程中的部分,了解更多信息和解决方案。基本解决方案是为长时间运行的任务创建一个单独的线程。
这也是System.out.println(..)工作的原因,因为它在不同的线程上执行。