我正在进行项目,我在按钮点击上执行三项任务,需要aprox。 2-3分钟我正在使用以下代码更改jLabel的文本
lblStatus.setText( "Phase1 done successfully !!!, Phase2 started " );
但我只得到#34;所有阶段都成功完成!!!"所有运行完成后,jLabel中的文本。
答案 0 :(得分:2)
如果您在EDT中运行长时间运行的任务,则UI会冻结,直到您的任务完成。因此,您应该在后台线程中执行长时间运行的任务。在后台线程中,您可以使用SwingUtilties.invokeLater()
来更新UI。
示例:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
lblStatus.setText( "Phase1 done successfully !!!, Phase2 started " );
}});
答案 1 :(得分:2)
我认为这是因为Event Dispatch Thread
默认执行您的任务,PropertyChangeListener
负责管理所有Swing组件,因为它们不是线程安全的。此线程应该只执行短任务,否则您的应用程序将无法响应。您应该将您的任务转换为SwingWorker
的子类,然后您就可以使用<ng-map zoom="4" center="39.02, -95.81">
<map-data on-click="vm.onClick()"
load-geo-json="us-states-20m.json">
</map-data>
</ng-map>
,以便在任务进度发展时修改您的状态文本。
有关Concurrency in Swing
的更多详情。
答案 2 :(得分:0)
您可以使用以下方式更改颜色:
lblStatus.setForeground(Color.red);
并且对于更改文本,您可以使用setText()
方法,如果您在使用时遇到问题,请在此处发送所有代码
答案 3 :(得分:0)
更改颜色部分文字使用html
lblStatus.setText("<html><b><font color='red'>Phase1 done successfully !!!</font></b>, Phase2 started");