如何使用嵌入式JavaFx小程序更新Swing中的饼图 - 空点异常

时间:2012-07-18 21:22:41

标签: java swing javafx

我正在为学校完成最后的编程任务,并希望在JavaFx中以动态饼图的形式为我的java应用程序添加一些小功能眼睛糖果。

使用Netbeans 7.2 rc2,我从模板中创建了swing / javafx混合应用程序。我扩展了JPanelClass以创建一个shell,我的主应用程序可以使用它来访问FX功能。然而,我面临的问题是,当图表的初始化顺利进行时,当我尝试更新爆破的东西时,它会生成一个空指针异常。 我相信这是相关的代码:

实例化:

public class PieChartJFxPanel extends JApplet {

  private static final int JFXPANEL_WIDTH_INT = 500;
  private static final int JFXPANEL_HEIGHT_INT = 500;

    StackPane root = new StackPane();
    PieChart athleteChart;
    ObservableList<PieChart.Data> pieChartData =FXCollections.observableArrayList();
    private static JFXPanel fxContainer;
    private int fAthletes=0;
    private int rAthletes=0;

   public PieChartJFxPanel(int totalAthletes,int finishedAthletes){
    super();
    fAthletes=finishedAthletes;
    rAthletes=totalAthletes-fAthletes;
}

@Override
public void init() {
    fxContainer = new JFXPanel();
    fxContainer.setPreferredSize(new Dimension(JFXPANEL_WIDTH_INT, JFXPANEL_HEIGHT_INT));                    
    add(fxContainer, BorderLayout.CENTER);
    // create JavaFX scene
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            createScene();
        }
    });
}

场景构造函数:

private void createScene() {     
    pieChartData.add(new PieChart.Data("Finished",fAthletes));
    pieChartData.add(new PieChart.Data("Outstanding",rAthletes));               
    athleteChart=new PieChart();     
    athleteChart.setLegendVisible(false);
   athleteChart.setTitle("Race Status");
   //athleteChart.setAnimated(true);       
    athleteChart.setData(pieChartData);               

    root.getChildren().add(athleteChart);
    fxContainer.setScene(new Scene(root));        
    //


}

产生异常的方法:

public void setData(int total, int in){
    final  ObservableList<PieChart.Data> pieChartDat=FXCollections.observableArrayList();
    pieChartDat.add(new PieChart.Data("Finished",fAthletes));
    pieChartDat.add(new PieChart.Data("Outstanding",rAthletes));  
    athleteChart.setData(pieChartDat);                
}

例外:

Exception in thread "main" java.lang.NullPointerException
     at piechartjpanel.PieChartJFxPanel.setData(PieChartJFxPanel.java:95)
     at piechartjpanel.AthleteIOChart.setAthletes(AthleteIOChart.java:62)
     at piechartjpanel.Test.setter(Test.java:34)
     at piechartjpanel.Test.main(Test.java:48)

任何帮助表示赞赏:) 提前致谢

2 个答案:

答案 0 :(得分:1)

您永远不会初始化atheleteChart

athleteChart.setData(pieChartDat);

调用此函数时,{p> athleteChartnull,并且始终为。{/ p>

在构造函数中初始化它或只是将其更改为PieChart atheleteChart = new PieChart();

答案 1 :(得分:0)

我发现因为JavaFX使用对象作为数据模型,每当对象的参数发生变化时,图表会自动升级,因此在我上面发布的示例中更改了pieChart的值,我所需要的只是类似于以下内容:

pieChartData.get(index).setValues(blah,blah);

我发现Swing组件也习惯这样做,使用对象作为动态数据类型,自动更改以反映外观以反映更改的值。我很惊讶没有人发现这一点,也许我严厉地说了我的问题。 谢谢大家。