gpt4 book ai didi

java - JSlider 卡住程序

转载 作者:行者123 更新时间:2023-11-29 08:39:27 25 4
gpt4 key购买 nike

我目前正在开发一个程序,它将 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/

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