简而言之,我创建了一个扩展包含JLabel的JWindow的类。此JLabel的文本通过计时器对象随机更新,该对象使用scheduleAtFixedRate方法每50 ms实例化一次TimerTask。通过在一个单独的线程中调用一个方法(让我们称之为传输线程)来处理JLabel中的值,该线程处理将数据传输到某个设备。问题是JWindow出现在屏幕上没有任何内容,直到传输到设备结束,然后我将得到传输线程的最后结果。问题是什么?
答案 0 :(得分:2)
而不是java.util.Timer
,javax.swing.Timer
可能更方便,如example所示。
答案 1 :(得分:1)
问题是您在事件调度线程(EDT)之外的其他线程中访问swing组件。这是被禁止的。
每个swing组件的javadoc都有一个指向此页面的链接:http://download.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading,其中详细说明了线程策略。