我是Eclipse中使用Swing和Window Builder进行Java多线程和GUI开发的初学者 我试图得到一个jlabel,显示程序的状态,以显示文本,并在按下按钮时快速从红色淡黑色,然后在十秒钟内消失。
我尝试使用新线程和定时任务(How to fade color from white to black?)在Stack Overflow上的几个答案中结合使用这些建议,并且第一次按下按钮时代码正常工作。但是,再次按下该按钮并再次调用该方法时,它只会短暂闪烁红色,文本会很快消失。
我认为这是因为当第二次按下按钮时,旧线程仍在运行,并且两者都试图控制标签。我显然在Stack Overflow上发现了几个关于如何在Java中杀死踏板的问题(包括How do you kill a thread in Java?),但是在我的情况下它们似乎都没有帮助。我对多线程和Swing GUI相对缺乏经验,所以我可能在代码中犯了一些非常愚蠢的错误。
这里是按下按钮时由事件监听器调用的方法(此方法位于单独的" Program Main"控制器类中):
private static void setBriefLblStatus(String content) {
one = new Thread() {
public void run() {
setLblStatus(content);
fading = Color.RED;
TimerTask fadingTask = new TimerTask() {
@Override
public void run() {
if (fading.getRed() > 0) {
fading = new Color(fading.getRed() - 1, 0, 0);
setLblStatusColor(fading);
}
}
};
timer = new Timer();
timer.scheduleAtFixedRate(fadingTask, 7, 7);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setLblStatus("");
}
};
one.start();
}