我正在尝试将图像保存到我的文件系统,如javafx图像操作页面上所述:http://docs.oracle.com/javafx/2/image_ops/jfxpub-image_ops.htm但我一直收到此异常错误:
java[80783:707] [JRSAppKitAWT markAppIsDaemon]: Process manager already initialized: can't fully enable headless mode.
这个stackoverflow问题有点帮助JavaFX screencapture headless exception on OSX,但我仍然坚持保存图像。
我可以用任何方式保存图像吗?
这就是我目前正在做的事情:
File outFileImage = new File(imageUrl);
Toolkit tk = java.awt.Toolkit.getDefaultToolkit().getDefaultToolkit();
try {
ImageIO.write(SwingFXUtils.fromFXImage(image, null), ".png", outFileImage);
} catch (Exception e) {
log.log(Level.WARNING, "Image not saved to disk", e);
}
的修改
我尝试运行Java 8以查看问题是否会得到解决,但我一直收到JavaFX FXML错误:
javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load.
/Users/jonathan/Projects/Dominion/target/classes/dominion/application/controller/main_overview_tab.fxml:13
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2613)
at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:104)
at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.java:1320)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at dominion.application.controller.MainOverviewTab.initView(MainOverviewTab.java:64)
的修改
我已将此JavaFX FXML加载问题发布到此处的另一个问题:Root hasn't been set Error with Java 8 Eclipse
答案 0 :(得分:2)
在RT-20784 Mac: Headless environment issue, MacOSX的评论中,与您粘贴到问题中的警告消息相关,开发人员指出:
这确实需要JDK中的修复程序。我们没有计划将这些特定更改移植到7uX版本,因为它们有些风险,我们不想破坏7uX分支的稳定性。正如史蒂夫建议的那样,请转到8。
AFAIK,除了FX迫使AWT以无头模式运行之外,没有其他任何因此而改变或中断的事实。因此,您可以假设打印到控制台的警告是缺失更改的唯一副作用。只要您不需要在应用程序中使用AWT / Swing,就应该是安全的。
所以也许你最好的做法是尝试Java 8,看看你是否还有任何问题。
根据有关setRoot()的更新问题进行更新
您获得FXML错误的Java 8版本是什么?根据这个Bug Report,这个特殊的“Root尚未设置”FXML加载错误可能已在JavaFX 8b121中修复。可能会看到related StackOverflow question on setRoot errors。 FXML加载问题与将图像保存到文件系统的原始问题无关,通常不相关的问题最好被问为新问题。