如何在Mac上使用JavaFX将图像保存到文件系统?

时间:2014-01-17 05:38:42

标签: java image save javafx javafx-2

我正在尝试将图像保存到我的文件系统,如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

1 个答案:

答案 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加载问题与将图像保存到文件系统的原始问题无关,通常不相关的问题最好被问为新问题。