【发布时间】:2016-12-29 20:14:21
【问题描述】:
我目前正在开发一个程序,它将一个 100 到 355 之间的值发送到一个带有 Arduino 与 rgb LED 灯条连接的串行端口。
程序运行了一会儿,但突然卡住了,我无法移动任何滑块或单击任何按钮。
我认为这是由于程序处理了太多事件,因为如果我缓慢移动滑块,这个问题不会经常发生,但我不知道如何减少滑块激活的事件数量。
这是我的滑块代码:
redslide.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
try {
output.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
int brightness = redslide.getValue();
String message = "r" + brightness;
byte[] data = message.getBytes();
try {
output.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
});
这是我的新代码:
redslide.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
int brightness = redslide.getValue();
String message = "r" + brightness;
byte[] data = message.getBytes();
new Thread(() -> Write(data)).start();
}
});
public static void Write(byte[] data){
try {
output.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
发送数据可能不会导致冻结。应用程序是否也在 Swing 事件线程上接收数据?
-
................................你好??
标签: java swing communication