我目前正在开发一个程序,它将发送一个介于100和355之间的值到串行端口,并带有一个Arduino连接到rgb LED灯带。JSlider冻结程序
程序工作正常,但突然冻结,我不能移动任何滑块或点击任何按钮。
我相信这是由于程序处理太多的事件,因为如果我缓慢地移动滑块,这个问题并不经常发生,但我不知道如何减少滑块激活的事件数量。
这里是我的一个滑块代码:
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事件线程上接收数据? –
............................你好? –