【问题标题】:How do i save an image to the file system with JavaFX on a Mac?如何在 Mac 上使用 JavaFX 将图像保存到文件系统?
【发布时间】:2014-02-06 08:31:42
【问题描述】:

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

【问题讨论】:

  • 您的图像是否正确写入,尽管有错误消息,还是您只是关心该消息?
  • 不,图像没有保存到磁盘

标签: java image save javafx javafx-2


【解决方案1】:

RT-20784 Mac: Headless environment issue, MacOSX 的评论中,与您粘贴到问题中的警告消息有关,开发人员指出:

这确实需要在 JDK 中进行修复。我们没有计划将这些特定更改移植到 7uX 版本,因为它们有些风险,而且我们不想破坏 7uX 分支的稳定性。正如史蒂夫建议的那样,请移至 8。

AFAIK,除了 FX 强制 AWT 在无头模式下运行这一事实之外,其他任何事情都不会因此而改变或中断。因此,您可以假设打印到控制台的警告是缺少更改的唯一副作用。只要您不需要在应用程序中使用 AWT/Swing,就应该是安全的。

因此,也许您最好的做法是尝试Java 8,看看您是否还有任何问题。

根据有关 setRoot() 的更新问题进行更新

您遇到 FXML 错误的 Java 8 是什么版本?根据此Bug Report,此特定的“尚未设置根”FXML 加载错误可能已在 JavaFX 8b121 中修复。可能会看到related StackOverflow question on setRoot errors。 FXML 加载问题与将图像保存到文件系统的原始问题无关,通常不相关的问题最好作为新问题提出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2021-04-05
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多