我目前正在开发一个程序,它将 100 到 355 之间的值发送到串行端口,Arduino 与 rgb led 灯条相连。
该程序运行良好,但突然停止运行,我无法移动任何 slider 或单击任何按钮。
我认为这是由于程序处理了太多事件,因为如果我缓慢移动 slider ,这个问题不会经常发生,但我不知道如何减少 slider 激活的事件数量。
这是我的 slider 代码:
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();
}
}
最佳答案
如果没有您的完整程序,很难确定,但您似乎正在从 ChangeListener
读取和写入数据。
读写操作阻塞了一段不确定的时间,在此期间 Event Dispatch Thread (EDT)无法处理其他事件。阻止 EDT 将使您的 GUI 看起来像被卡住了。
尝试分离另一个线程来处理读/写操作或使用 SwingWorker以避免阻塞 EDT。
(用 Minimal, Complete, and Verifiable example 更新您的帖子,我会尽力为您提供一些更具体的指导)
关于java - JSlider 卡住程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386567/