Java Jfreechart中是否可以使用多线程?

Java Jfreechart中是否可以使用多线程?,java,multithreading,Java,Multithreading,我想为我的图表创建一个数据集,它将每秒更新一次。但是我使用ssh命令来获取数据。例如,当我在远程机器上调用一个sar-ndev11时,它会在3秒钟后响应。我像这样连续调用5-6个命令,所以更新图表需要很长时间。所以我需要在线程中发送这些命令,这样我可以比以前等待的时间更短。我不是Java线程方面的专业人士 下面是一个示例代码: public Mygraph()// my constructor function, it puts some components for my form. {

我想为我的图表创建一个数据集,它将每秒更新一次。但是我使用ssh命令来获取数据。例如,当我在远程机器上调用一个
sar-ndev11
时,它会在3秒钟后响应。我像这样连续调用5-6个命令,所以更新图表需要很长时间。所以我需要在线程中发送这些命令,这样我可以比以前等待的时间更短。我不是Java线程方面的专业人士

下面是一个示例代码:

public Mygraph()// my constructor function, it puts some components for my form.
{
    // some code

    timer = new Timer(FAST, new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            TimePeriod period = new Second();

            for (int j = 0; j < PARAM.length; j++) {

                String sonuc = PRS.Pars1(SES.CONNECTION, "sar -n DEV 1 1 | grep -wF  " + SUTUN
                        + " | awk '{ print $" + PARAM[j] + " }' | tail -1");

                String sutun = PRS.Pars1(SES.CONNECTION,
                        "sar -n DEV 1 1 | grep IFACE | tail -1 | awk '{ print $" + PARAM[j]
                                + " }'");

                // i need to get these "sonuc" and "sutun" variables
                // concurrently above. Because each command takes 2-3
                // seconds to execute.
                dataset.add(period, Double.parseDouble(sonuc), sutun);

                if (dataset.getItemCount() > COUNT) {
                    TimePeriod firstItemTime = dataset.getTimePeriod(0);
                    dataset.remove(firstItemTime, sutun);

                }
            }

        }

    });

    // some code
}
public Mygraph()//我的构造函数,它为我的表单放置了一些组件。
{
//一些代码
计时器=新计时器(快速,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
时间段=新的秒();
对于(int j=0;jCOUNT){
TimePeriod firstItemTime=dataset.getTimePeriod(0);
dataset.remove(firstItemTime,sutun);
}
}
}
});
//一些代码
}
JFreeChart不是线程安全的。与任何其他AWT/Swing组件一样,对JFreeChart的任何更新都应该在EDT上完成


这就是说,您可以(也可能应该)将加载放在不同的线程上,并且只在加载整个数据集后更新图表(在EDT上)。

+1 JFreeChart基于AWT,但rest的描述是正确的==应该像任何其他AWT/Swing组件一样,实际上不是吹毛求疵,但看起来JFreeChart至少部分是基于Swing构建的。例如,ChartPanel扩展了JPanel:关于您的建议有没有一个示例?您可能会找到一个通用示例,用于在另一个线程上处理某些数据,并使用SwingUtilities.invokeLater()使用EDT上处理的数据更新gui。您还可以查看Swing并发教程: