У меня есть простой компонент, который я хочу моргать каждый раз, когда мое приложение получает «сообщение». В настоящее время я создаю новый поток, чтобы «осветить» компонент, спать, а затем сбросить компонент. Как я мог добиться этого лучше? Я знаю, что потоки дороги.Самый эффективный способ мигать светом
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();
}
}
Предложение: сделать окончательный '' int's частного конечного ИНТ TOP = 1', 'частное окончательное ИНТ MIDDLE = 2 'и т. д. Тогда будут выполняться' colors.put (TOP, unit) 'и' colors.put (pos, color) ', без необходимости переключения. Кроме того, сделайте это перечислением, чтобы вы могли проверять тип при передаче параметров. – MirroredFate
@MirroredFate было бы лучше использовать байт? Поскольку это значение будет только когда-либо 1, 2 или 3. Или разница будет незначительной? – globalburning
Наверное, нет. Если вы сильно обеспокоены памятью и пытаетесь сохранить ваши данные как можно компактнее, вы, вероятно, сохраните int в некотором конфигурационном байте данных в виде флагов, т. Е. У вас будет байт, значение которого может быть «0110-0000», где первые три бита будут указывать верхнюю, нижнюю и среднюю, и если бы они были «0», они были бы выключены, и «1» был включен. Но вы работаете на Java, поэтому у вас, вероятно, есть доступная память. Я бы пошел с идеей enum, так как это дает вам более четкий контроль над тем, что происходит. – MirroredFate