2016-12-03 12 views
2

私はjavafxグラフを使ってJavaスイングアプリケーションをJFrameに追加しています。ボタンをクリックすると、新しいウィンドウにチャートが表示されます。すべてが初めての周りに細かい動作しますが、チャート・ウィンドウを閉じて、もう一度ボタンをクリックの上、それは私が閉じるときfxPanelsceneをリセットする必要があると思うグラフを2回表示しようとするとjavafx swingがクラッシュする

fxPanel.setScene(scene); 

ラインで、次のチャート・ウィンドウを表示する前にクラッシュします最初はチャートウィンドウでしたが、私が試したことはこれまでに何もできませんでした。以下は、私のグラフプロットクラスです。どのような助けも大いに感謝します。

public class PlotChart extends JFrame implements WindowListener { 

    private JFrame chartWindow = new JFrame("Commitment Of Traders"); 

    public PlotChart(JFXPanel fxPanel) { 
     plotChart(fxPanel); 
    } 

    public void plotChart(JFXPanel fxPanel) { 

     final NumberAxis xAxis = new NumberAxis(); 
     final NumberAxis yAxis = new NumberAxis(); 
     final LineChart<Number,Number> lineChart = new LineChart<Number,Number>(xAxis,yAxis); 
     final Scene scene = new Scene(lineChart,800,600); 
     xAxis.setLabel("Week"); 

     lineChart.setTitle("Commitment of Traders"); 

     //Define a series 
     XYChart.Series commercials = new XYChart.Series<>(); 
     XYChart.Series nonCommercials = new XYChart.Series<>(); 
     XYChart.Series CLong = new XYChart.Series<>(); 
     XYChart.Series CShort = new XYChart.Series<>(); 
     commercials.setName("Dealers"); 
     nonCommercials.setName("Hedge Funds"); 

     //Populate series 
     for (int i=0;i<ReadCSV.getCommercials().size();i++) { 

      commercials.getData().add(new XYChart.Data(i,ReadCSV.getCommercials().get(i))); 
      nonCommercials.getData().add(new XYChart.Data(i,ReadCSV.getNonCommercials().get(i))); 
     } 

     lineChart.getData().add(commercials); 
     lineChart.getData().add(nonCommercials); 

     fxPanel.setScene(scene); // exception in this line 

     chartWindow.add(fxPanel); 
     chartWindow.setSize(800, 600); 
     chartWindow.setVisible(true); 
     chartWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     chartWindow.addWindowListener(new java.awt.event.WindowAdapter() { 

      public void windowClosing(java.awt.event.WindowEvent windowEvent) { 

       ReadCSV.clearVars(); 
       System.out.println("window closed"); 
      } 
     }); 
    } 

WindowListenerメソッドのオーバーライドは、私はちょうど今も、この問題に出くわした

+1

Welcome to Stackoverflow!質問にスタックトレースまたはエラーメッセージを引用してください(コードとしてスタックトレースをフォーマットしてください)。 –

+0

こんにちはOle、返信いただきありがとうございます、それはちょうど凍っているエラーメッセージはありません。私はtry/catchで囲みましたが、まだエラーは出ません... –

答えて

0

を省略しました。私は、毎回新しいJFXPanelを作成して、シーンごとに1回だけ設定することでそれを取り除くことができました。 これで問題は解決しますが、おそらくこれを解決する最もエレガントな方法ではありません。

関連する問題