Z寒火 2023-10-05 14:25 采纳率: 56%
浏览 4
已结题

关于chartpanel的线程

public class ChartMouse extends ChartPane;

..........................

@Override
    public void actionPerformed(ActionEvent e) {
        super.actionPerformed(e);
        String command = e.getActionCommand();

        switch (command) {
            case "ZOOM_RESET_BOTH":
                resetBoth();
                break;
            case "ZOOM_RESET_DOMAIN":
                resetDomain();
                break;
            case "ZOOM_RESET_RANGE":
                resetRange();
                break;
            case "ZOOM_RANGE_BOTH":
                zoomRangeBoth();
                break;
            case "ZOOM_IN_RANGE":
                zoomInRange();
                break;
            case "ZOOM_IN_DOMAIN":
            case "ZOOM_DOMAIN_BOTH":
                zoomDomain();
                break;
            case "ZOOM_OUT_BOTH":
                zoomOutBoth();
                break;
        }
        
    }

在ChartPanel中actionPerformed运行完后,这个线程不会结束,我调试了一下,会进入EventDispatchThread这个类的这个方法中

void pumpEventsForFilter(int id, Conditional cond, EventFilter filter) {
        addEventFilter(filter);
        doDispatch = true;
        while (doDispatch && !isInterrupted() && cond.evaluate()) {
            pumpOneEventForFilters(id);
        }
        removeEventFilter(filter);
    }

这就导致必须有其它事件才能终止这个actionPerformed,有没有什么解决办法?

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-05 23:36
    关注

    引自强大而免费的微信小程序:皆我百晓生。


    在调用ChartPanel的actionPerformed方法后,可以使用一个新的线程来等待指定时间,然后调用ChartPanel的repaint()方法来刷新界面,可以终止actionPerformed的执行。例如:

    public void actionPerformed(ActionEvent e) {
        // your code here
    
        // Create a new thread to wait for a specified time
        Thread thread = new Thread(new Runnable() {
            public void run() {
                try {
                    // Wait for 1 second (adjust the time as needed)
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
                // Call repaint to refresh the ChartPanel
                chartPanel.repaint();
            }
        });
        thread.start();
    }
    

    在新线程中,可以通过调用Thread.sleep()方法来指定等待的时间,并在等待结束后调用ChartPanel的repaint()方法来刷新界面。根据需要,可以调整等待的时间。这样可以避免依赖于其他事件来终止actionPerformed的执行。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月8日
  • 创建了问题 10月5日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?