I am a beginner with multithreading and GUI development in Java with Swing and Window Builder in Eclipse.
I am trying to get a jlabel that shows the status of the program to display text and quickly fade from red to black when a button is pressed and then to disappear in ten seconds.
I tried to combine suggestions for this from several answers on Stack Overflow using a new thread and a timed task (How to fade color from white to black?) and the code works correctly the first time the button is pressed. However, when the button is pressed again and the method is called again, it only briefly blinks red and the text disappears very quickly.
I believe that it is because when the button is pressed a second time the old thread is still running and both are trying to control the label. I obviously found several question on Stack Overflow on how to kill treads in Java (including How do you kill a thread in Java?), but none of them seemed to help in my situation. I am relatively inexperienced with multithreading and Swing GUIs, so I probably made some really dumb mistakes with my code.
Here it the method that is called by a event listener when a button is pressed (this method is in a separate "Program Main" controller class):
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();
}