亲爱的朋友们:我的秋千有问题。我不能分享代码,因为这违反了公司的政策,所以我会尽力解释这个问题。
简而言之,我创建了一个类,它扩展了包含JLabel的JWindow。这个JLabel的文本通过一个计时器对象随机更新,该对象使用scheduleAtFixedRate方法每50毫秒实例化一个TimerTask。JLabel中的值是通过调用处理向某个设备传输数据的单独线程(我们称之为传输线程)中的方法来检索的。问题是JWindow出现在屏幕上,没有任何内容,直到传输到设备结束,然后我将获得传输线程的最后结果。问题是什么?
与java.util.Timer
相比,javax.swing.Timer
可能更方便,如本例所示。
问题是您在事件分派线程(EDT)之外的其他线程中访问swing组件。这是不允许的。
每个swing组件的javadoc都有一个到这个页面的链接:http://download.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading,那里有线程策略的详细解释。