从另一个线程更新JLabel

时间:2011-05-05 09:31:31

标签: java multithreading swing jlabel jwindow

亲爱的伙计们, 我有摇摆相关的问题。我无法分享代码,因为这违反了公司政策,所以我会尽力解释这个问题。

简而言之,我创建了一个扩展包含JLabel的JWindow的类。此JLabel的文本通过计时器对象随机更新,该对象使用scheduleAtFixedRate方法每50 ms实例化一次TimerTask。通过在一个单独的线程中调用一个方法(让我们称之为传输线程)来处理JLabel中的值,该线程处理将数据传输到某个设备。问题是JWindow出现在屏幕上没有任何内容,直到传输到设备结束,然后我将得到传输线程的最后结果。问题是什么?

2 个答案:

答案 0 :(得分:2)

而不是java.util.Timerjavax.swing.Timer可能更方便,如example所示。

答案 1 :(得分:1)

问题是您在事件调度线程(EDT)之外的其他线程中访问swing组件。这是被禁止的。

每个swing组件的javadoc都有一个指向此页面的链接:http://download.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading,其中详细说明了线程策略。