java - JSlider 卡住程序

标签 java swing communication

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

相关文章:

Java 类实例(使用 ToString 方法覆盖)输出 "adt.BinaryNode@1e24e45"

java - 从 Java 中的组合框中删除所有项目

Java内部类的使用和实例化

java - 如何让 2 个 Java 应用程序相互通信?

java - Android 权限不起作用

java - 如果我关闭 stardog 连接池中的连接会发生什么

java - Java Swing 中的 JButton 错误

mvvm - 6 个 ViewModel 和一个 Messenger 之间的通信 == AntiPattern?

c# - 如何使用 C# 与 Chrome(Chrome 扩展)通信?

java - 如何将输出固定在单独的行上以创建 5x5 矩阵?