Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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生成图形?_Java_Javafx - Fatal编程技术网

在应用程序类之外使用javafx生成图形?

在应用程序类之外使用javafx生成图形?,java,javafx,Java,Javafx,我真的很喜欢javafx用于渲染2D图形的方式,并且我已经围绕着用它制作图表构建了一个完整的类。我已经成功地创建了窗格对象的png,这样我就可以在本地保存它,以后再显示它 我遇到的问题是,当我想在一个扩展JavaFX应用程序的类之外使用我的绘图类时(更具体地说,我想让它成为库的一部分,库支持输出渲染图形的png。但作为一个库,创建UI似乎效率不高。) 有效的东西: 构建图形对象(创建窗格,执行初始图形工作,无错误) 调用将Arcs添加到图形窗格的类方法 破裂的东西: 调用将文本添加到窗格的

我真的很喜欢javafx用于渲染2D图形的方式,并且我已经围绕着用它制作图表构建了一个完整的类。我已经成功地创建了
窗格
对象的png,这样我就可以在本地保存它,以后再显示它

我遇到的问题是,当我想在一个扩展JavaFX
应用程序的类之外使用我的绘图类时(更具体地说,我想让它成为库的一部分,库支持输出渲染图形的png。但作为一个库,创建UI似乎效率不高。)

有效的东西:
  • 构建图形对象(创建窗格,执行初始图形工作,无错误)
  • 调用将
    Arc
    s添加到图形窗格的类方法
破裂的东西:
  • 调用将文本添加到窗格的类方法(在
    新文本(“”
    声明时失败)。堆栈跟踪:
当我在扩展
应用程序的类的
start()
方法中创建对象时,可以在对象创建之后调用所有这些类方法。但并非如此


事实上,如果我必须在应用程序类中生成图像,那么它到底是如何工作的?我创建了一个类的实例,但它需要以某种方式运行…?

这与
应用程序
类无关。
RuntimeException
表示,在使用其图形系统之前,您需要确保JavaFX工具包已初始化。启动JavaFX至少有三种方法:(1)应用程序启动(…)
,(2)平台启动(()->…)
,以及(3)新建JFXPanel()。您的
非法状态异常
不同;这意味着工具包已初始化,但您的线程错误。您可以使用
Platform.runLater(()->…)
@Slaw调度FX线程上的操作。我确实尝试过使用
Application.launch()
,但我似乎无法传递包含渲染最终图形所需的所有数据的对象。你能告诉我如何在javaFX中使用后两种方法吗?我的google fu让我找不到好的例子。谢谢首先,你的实际目标是什么?这是一个具有用户与之交互的UI的应用程序吗?或者您正在尝试创建一个“不可见”地呈现图形的应用程序。@abg出于您的目的,Platform.startup(()->…)变体可能是更相关的,但不要忘记,您只能调用一次。在第一次调用之后,您必须使用Platform.runLater(()->…)。@Slaw我正在尝试创建一个库/API,主要部分是它所做的计算,但作为辅助功能,我需要数据的图形输出,以便“不可见地”渲染精确到我想要的。我还需要能够将生成的信息传递到javafx应用程序中。这似乎是我遇到最多麻烦的地方。这与
应用程序
类无关。
RuntimeException
表示,在使用其图形系统之前,您需要确保JavaFX工具包已初始化。启动JavaFX至少有三种方法:(1)应用程序启动(…),(2)平台启动(()->…),以及(3)新建JFXPanel()。您的
非法状态异常
不同;这意味着工具包已初始化,但您的线程错误。您可以使用
Platform.runLater(()->…)
@Slaw调度FX线程上的操作。我确实尝试过使用
Application.launch()
,但我似乎无法传递包含渲染最终图形所需的所有数据的对象。你能告诉我如何在javaFX中使用后两种方法吗?我的google fu让我找不到好的例子。谢谢首先,你的实际目标是什么?这是一个具有用户与之交互的UI的应用程序吗?或者您正在尝试创建一个“不可见”地呈现图形的应用程序。@abg出于您的目的,Platform.startup(()->…)变体可能是更相关的,但不要忘记,您只能调用一次。在第一次调用之后,您必须使用Platform.runLater(()->…)。@Slaw我正在尝试创建一个库/API,主要部分是它所做的计算,但作为辅助功能,我需要数据的图形输出,以便“不可见地”渲染精确到我想要的。我还需要能够将生成的信息传递到javafx应用程序中。那似乎是我遇到最多麻烦的地方。
java.lang.RuntimeException: Internal graphics not initialized yet
    at com.sun.glass.ui.Screen.getScreens(Screen.java:70)
    at com.sun.glass.ui.Screen.getMainScreen(Screen.java:61)
    at com.sun.javafx.font.PrismFontFactory.getSystemFontSize(PrismFontFactory.java:1876)
    at com.sun.javafx.font.PrismFontLoader.getSystemFontSize(PrismFontLoader.java:241)
    at javafx.scene.text.Font.getDefaultSystemFontSize(Font.java:71)
    at javafx.scene.text.Font.getDefault(Font.java:86)
    at javafx.scene.text.Text.getFont(Text.java:478)
    at javafx.scene.text.Text.getFontInternal(Text.java:487)
    at javafx.scene.text.Text.getTextLayout(Text.java:226)
    at javafx.scene.text.Text.needsFullTextLayout(Text.java:184)
    at javafx.scene.text.Text.access$200(Text.java:95)
    at javafx.scene.text.Text$2.invalidated(Text.java:389)
    at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:109)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:144)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:49)
    at javafx.scene.text.Text.setText(Text.java:370)
    at javafx.scene.text.Text.<init>(Text.java:129)
    at io.dreadylocks.astrojava.drawing.ChartDraw.addPlanets(ChartDraw.java:211)
    at io.dreadylocks.astrojava.Chart.generateChartImage(Chart.java:192)
    at io.dreadylocks.astrojava.MainTest.main(MainTest.java:15)
java.lang.IllegalStateException: Not on FX application thread; currentThread = main
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:279)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:444)
    at javafx.scene.Node.snapshot(Node.java:1928)
    at io.dreadylocks.astrojava.drawing.ChartDraw.toPng(ChartDraw.java:220)
    at io.dreadylocks.astrojava.MainTest.main(MainTest.java:15)