0

我正在开发一个使用 Java 和 JFreeChart 的应用程序。在我的主要我想使用计时器来关闭类的窗口/对象并创建一个新的对象和类的窗口。JFreeChart 的动态功能似乎不适用于我正在使用的 API,这是我可以给图形带来动态感觉的唯一方法。

下面的代码是我目前的主要代码,但它所做的只是打开一个窗口,然后关闭它并在一分钟后打开一个新窗口。显然,很清楚为什么会发生这种情况,但我似乎想不出一个好的方法来让它在计时器内创建和删除所有对象。

  public static void main(final String[] args) throws Exception {
    Scanner in = new Scanner(System.in);
    final String host = "";
    final String username = "";
    final String password = "";
    final String id = "testStream"; 

    final GraphStream demo = new GraphStream("Dia Example graph", host, username, password, id);
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);
    new java.util.Timer().schedule( 
            new java.util.TimerTask() {
                @Override
                public void run() {
                    demo.setVisible(false);
                    demo.dispose();
                    try {
                        final GraphStream demo2 =new GraphStream("Dia Example graph", host, username, password, id);
                        demo2.pack();
                        RefineryUtilities.centerFrameOnScreen(demo2);
                        demo2.setVisible(true);
                    } catch (DataServiceException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }, 
            60000); 
}

}
4

1 回答 1

0

我建议将构造函数拆分为极简构造函数和刷新方法:

public static void main(final String[] args) throws Exception {
   final String host = "";
   final String username = "";
   final String password = "";
   final String id = "testStream"; 
   final GraphStream demo = new GraphStream( "Dia Example graph" );
   new java.util.Timer().schedule( 
      new java.util.TimerTask() {
         @Override
         public void run() {
            demo.refresh( host, username, password, id );
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible( true );
         }
      }, 
      0, 60000); 
}

如您所见, timer.schedule()可能有 3 个参数可以立即启动。

于 2013-03-06T19:56:41.277 回答