Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX,更改饼图切片的名称会导致IllegalStateException_Java_Javafx - Fatal编程技术网

JavaFX,更改饼图切片的名称会导致IllegalStateException

JavaFX,更改饼图切片的名称会导致IllegalStateException,java,javafx,Java,Javafx,我现在使用一个JavaFX,现在我创建了PieChart 我在教程中看到 饼图标签可能有用,因此我让它显示名称和数据值 就这样 结果与初始结果完全相同 下一步是根据数据用户的选择使其动态化 public void setSlice(double percent, int index){ pieChartData.get(index).setPieValue(percent); pieChartData.get(index).setName(caption[inde

我现在使用一个JavaFX,现在我创建了PieChart 我在教程中看到 饼图标签可能有用,因此我让它显示名称和数据值 就这样

结果与初始结果完全相同 下一步是根据数据用户的选择使其动态化

public void setSlice(double percent, int index){
        pieChartData.get(index).setPieValue(percent);
        pieChartData.get(index).setName(caption[index]+"\n"+(int)(percent*100)+"%");
    }
以及行pieChartData.getindex.setNamecaption[index]+\n+intpercent*100+%;原因

线程AWT-EventQueue-0中出现异常 java.lang.IllegalStateException:不在FX应用程序线程上; currentThread=AWT-EventQueue-0


是否仍有更改切片名称的方法?或者使结果与我上面描述的类似?

从异常中可以看出的最可能的原因是方法setSlice是从JavaFX应用程序线程以外的线程调用的

解决此问题的方法有很多:

这是最简单的方法,从JavaFX应用程序线程调用该方法 您可以从应用程序线程调用该方法,也可以在其中覆盖该方法主体 您可以执行以下操作:

Platform.runLater(new Runnable(){
     setSlice(10, 3);
});
或者

您还可以深入了解如何使用和创建类
因为这似乎是一个集成了JavaFX和Swing/AWT的应用程序,所以可能也会有所帮助。
Platform.runLater(new Runnable(){
     setSlice(10, 3);
});
public void setSlice(double percent, int index){
   Platform.runLater(new Runnable(){
       pieChartData.get(index).setPieValue(percent);
       pieChartData.get(index).setName(caption[index]+"\n"+(int)(percent*100)+"%");
   });
}