gpt4 book ai didi

java - 最有效的闪烁方式

转载 作者:行者123 更新时间:2023-12-01 12:13:32 24 4
gpt4 key购买 nike

我有一个简单的组件,每次我的应用程序收到“消息”时我都想闪烁它。目前,我正在创建一个新线程来“点亮”组件、 sleep ,然后重置组件。我怎样才能以更好的方式实现这一目标?我知道线程很昂贵。

public class StatusLights extends JComponent {

private static final Color unlit = Color.lightGray;

private HashMap<String, Color> colors = new HashMap<String, Color>();

public StatusLights() {
// start with no colors

colors.put("TOP", unlit);
colors.put("MIDDLE", unlit);
colors.put("BOTTOM", unlit);
}

// 1 = top 2 = mid 3 = bottom
public void light(Color color, int pos) {
switch (pos) {
case (1): {
colors.put("TOP", color);
break;
}
case (2): {
colors.put("MIDDLE", color);
break;
}
case (3): {
colors.put("BOTTOM", color);
break;
}
default: {
// not valid position

}
}
repaint();

}

public void clear() {
colors.put("TOP", unlit);
colors.put("MIDDLE", unlit);
colors.put("BOTTOM", unlit);

repaint();
}

public void blink(final Color color, final int i) {
new Thread(new Runnable() {
public void run() {
light(color, i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
clear();
}
}).start();
}

}

最佳答案

使用 Swing javax.swing.Timer,它可以按固定时间间隔重复,提供一定程度的线程隔离/同步(因为它的计时器事件在事件队列中排队并在context 事件一次调度一个线程)并防止任何违反 Swings 单线程规则的可能性。

另一种方法是使用 SwingWorker 并利用其 publish/process 方法...

关于java - 最有效的闪烁方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com