2010-10-28 41 views
0

我不是一个java开发人员,但我需要编写一个小程序来通过ftp 上传文件(实际上,我是一个web开发人员)。一切工作正常,除了反馈消息的显示方式。让我用一个例子解释:是否缓冲了jtextarea.settext()方法?

如果我写sometingh这样,方法(通过点击事件控制)

//.... 
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里面,我在immeditaly上读取“connected”(altought需要几秒钟才能连接),我从来没有看到“Connecting to remote server”字符串。

这听起来像Jpanel setText方法缓存在某种方式。
如何实时显示消息?

(我试着测试做的System.out.println和它的工作太棒了!)
感谢

回答

1

如果我写sometingh这样的方法(通过点击事件控制)内

在事件侦听器中执行的代码在EDT上执行。问题在于长期运行的任务阻止了Swing EDT。所以GUI从来没有机会重新绘制自己。

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

这也是为什么System.out.println(..)有效,因为它在不同的线程上执行。