现在已经成功的画出了一个三十分钟内的实时数据曲线,总共360个点,五秒钟一个点,但是我重新清除timeseries的数据进行重画实时曲线的时候经常出错,到底是怎么回事呢?是不是jFreeChart有问题?
我的重画实时曲线代码如下:
public void redrawRQXData(double[] rqxdata)
    {
        /* 三十分钟内的实时曲线重画,每五秒钟一个点,共360个点 */
        this.timeseries.clear();
        Calendar calendar = Calendar.getInstance();
        calendar.add(calendar.MINUTE, -30);
        for(int i=0;i<rqxdata.length;i++)
        {
            Second s = new Second(calendar.getTime());
            this.timeseries.add(s, rqxdata[i]);
            calendar.add(calendar.SECOND, 5);
        }
    }
经常在上面那句:
this.timeseries.add(s, rqxdata[i]);
出错
我要是把它注释掉就什么事也没有!
到底是怎么回事呢?

解决方案 »

  1.   

    那就不是时序图了,用xyseries吧
      

  2.   

    如果逻辑上没有错误,应该是同步问题吧,改下这里:
    public synchronized void paintComponent(Graphics g){
    }
    试试看
      

  3.   

    to Geek618() :
    逻辑上是没有错误的,提示出错信息就是paintComponent出错的,怎么个改法,本人是刚学,所以不怎么明白,还请多指教。
      

  4.   

    放心吧,jfreechart做实时曲线没问题的,你的逻辑也没问题,建议add改成update,另外,把你的出错信息贴出来。
      

  5.   

    to DelphiStudy(拿下BCD就去搞C++) :
    我现在改用Update了,现在可以Update数据,但是我怎么Updata时间轴呢,因为实时数据显示的那个时间也要跟着变动的,请指教!
      

  6.   

    public synchronized void paintComponent(Graphics g){
    }
    加上关键词:synchronized,如上位置!
      

  7.   

    to Geek618():
    我不是画在JFrame上面的,我是画在jTabbedPane上面的,所以没有paintComponent函数!
      

  8.   

    timeseries有一个setMaximumItemCount()和setMaximumItemAge()方法,可以设置你的曲线里面的值的最大时效或最大个数
      

  9.   

    timeseries.addOrUpdate()建议你用这个方法画图
      

  10.   

    我不是画在JFrame上面的,我是画在jTabbedPane上面的,所以没有paintComponent函数!
    ------------------------------------------------------------------------------
    不要在JFrame, JTabbedPane上画,最好在JPanel上画,JPanel上有paintComponent,因为虽然可以在JFrame和JTabbedPane上画,但他们应该只作为容器.
      

  11.   

    采用addOrUpdate,能让重复的时间给覆盖掉,不然会出错