【发布时间】:2011-05-05 09:31:30
【问题描述】:
亲爱的, 我有摆动相关的问题。我不能分享代码,因为它违反了公司政策,所以我会尽力解释这个问题。
简而言之,我创建了一个扩展包含 JLabel 的 JWindow 的类。这个 JLabel 的文本通过一个计时器对象随机更新,该对象使用 scheduleAtFixedRate 方法每 50 毫秒实例化一个 TimerTask。 JLabel 中的值是通过在一个单独的线程(我们称之为传输线程)中调用一个方法来检索的,该线程处理将数据传输到某个设备。问题是 JWindow 出现在屏幕上没有任何内容,直到传输到设备结束,然后我会得到传输线程的最后一个结果。会有什么问题?
【问题讨论】:
-
你能分享说明问题的不同代码吗?
-
我的猜测是您正在 GUI 线程中访问设备,这会阻止 GUI 更新。当您希望它更新 GUI 时,您需要确保 GUI 线程没有在设备上阻塞或锁定。
-
不,彼得,我实际上是从中介类创建 JWindow 对象。中介类在首次加载时启动传输线程。同样的中介类有一个 JButton,它通过调用传输线程中的方法来启动数据传输。就在传输开始之前,这个中介类创建了一个 JWindow,其中包含一个 JLabel,它从传输线程中的一个函数更新它的值。
-
您需要获取堆栈跟踪以了解应用程序在应该更新 JWindow 时正在做什么,但实际上没有。
-
“我不能共享代码,因为它违反了公司政策,”这有什么关系?我们从不要求您提供生产代码。我们要求一些可以证明问题的东西。创建 SSCCE 的重点是删除不必要的代码。您的问题只是关于计时器。值得注意的是,每个人都使用定时器。
标签: java multithreading swing jlabel jwindow