从另一个线程更新JLabel[英] Update JLabel from another thread

问题描述

亲爱的,我有摆动相关的问题.我不能分享代码,因为它违反了公司政策,所以我会尽力解释这个问题.

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

推荐答案

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

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

本文地址:https://www.itbaoku.cn/post/978465.html