2016-12-03 2 views
2

Я создаю приложение java swing с диаграммами javafx, добавленными в JFrame. Нажмите кнопку, чтобы отобразить диаграмму в новом окне. Все отлично работает в первый раз вокруг, но при закрытии окна графика и нажмите кнопку еще раз, он выходит из строя перед отображением следующего окна графика, на линииjavafx swing падает при попытке отобразить график дважды

fxPanel.setScene(scene); 

Я думаю fxPanel или 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

Добро пожаловать в Stackoverflow! Просьба указать трассировку стека или сообщение об ошибке в вопросе (трассировка стека файлов как код). –

+0

Привет Оле, спасибо за ответ, нет сообщения об ошибке, это просто зависает. Я попробовал окружение с помощью try/catch, но до сих пор не дает ошибки ... –

ответ

0

Я наткнулся на этот вопрос, а только сейчас. Мне удалось избавиться от него, создав новый JFXPanel каждый раз и, следовательно, установив сцену только один раз на каждом экземпляре. Решает проблему, но, вероятно, это не самый элегантный способ решить эту проблему.

Смежные вопросы