【发布时间】:2014-04-12 07:31:04
【问题描述】:
我想创建一个扩展 JFXPanel 的类来处理折线图,并将这个 JFXPanel 与我在 Java SE 中制作的应用程序集成,我还从我的 JFrame 应用程序将数据实时传递到图表。
这是我的示例代码:
public class LineChartJFXPanel extends JFXPanel {
private final LineChart<Number,Number> chart;
private final HashMap<String, XYChart.Series<Number,Number>> series;
private final NumberAxis xAxis, yAxis;
public LineChartJFXPanel() {
Platform.setImplicitExit(false);
series = new HashMap<>();
xAxis = new NumberAxis(0.0,10.0,1.0);
yAxis = new NumberAxis(0.0,10.0,1.0);
chart = new LineChart<>(xAxis,yAxis);
setScene(new Scene(chart));
}
public void setSeries(String idSeries, String nameSeries, Number xIni, Number yIni){
XYChart.Series<Number,Number> newSeries = new XYChart.Series<>();
newSeries.setName(nameSeries);
newSeries.getData().add(new XYChart.Data<>(xIni,yIni));
chart.getData().add(newSeries);
series.put(idSeries, newSeries);
}
}
******************************************
public class PanelChart extends JPanel{
LineChartJFXPanel lineChart;
public PanelChart(){
setLayout(new GridLayout(1, 2));
lineChart = new LineChartJFXPanel();
add(lineChart);
}
}
********************************
public class Main extends JFrame{
PanelChart chartPanel;
public Main(){
setPreferredSize(new Dimension(800, 600));
chartPanel = new PanelChart();
getContentPane().add(chartPanel);
setVisible(true);
}
public static void main(String args[]){
Main main = new Main();
main.setVisible(true);
}
}
但是当我运行代码时,它显示了以下错误:
Exception in thread "main" java.lang.IllegalStateException: Not on FX application thread; currentThread = main
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:237)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:400)
at javafx.scene.Scene.<init>(Scene.java:290)
at javafx.scene.Scene.<init>(Scene.java:198)
at javachartdemo.LineChartJFXPanel.<init>(LineChartJFXPanel.java:39)
at javachartdemo.PanelChart.<init>(PanelChart.java:22)
at javachartdemo.Main.<init>(Main.java:21)
at javachartdemo.Main.main(Main.java:27)
我需要在我的应用程序中进行哪些更改?
【问题讨论】:
-
我不确定你是否可以,因为 UI 环境是由 JavaME - AFAIK 定义的
-
"如何将 javafx 与 java me 集成?" Java ME?这适用于手机,而
JFrame是 Java SE(适用于台式计算机)。你指的是哪个? “请帮帮我!!!” 别再对我们大喊大叫了!键.. -
@MadProgrammer 虽然标题提到了我,但正文指的是 SE 和
JFrame。最令人困惑.. -
@AndrewThompson 它也被标记为 Swing :P
标签: java swing javafx javafx-2