【问题标题】:Unable to create Graphics2d object from BufferedImage无法从 BufferedImage 创建 Graphics2d 对象
【发布时间】:2020-07-06 17:43:41
【问题描述】:

我有一个BufferedImage 对象,由ByteArrayInputStream(ImageIO/read) 函数创建。 现在我想在这张图片上画一些线条,所以一开始我创建Graphics2d这样的对象:

(defn g2d (.createGraphics image))

这里发生了奇怪的事情,因为我的函数在这一步冻结了。它永远不会返回,永远不会抛出 Exception 什么都没有。我在服务器上运行这个程序:

openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

我怎样才能找到这种冻结的原因?我还检查了这个 Java 版本是否像这样无头:

(java.awt.GraphicsEnvironment/isHeadless)

但是那个方法返回了false

【问题讨论】:

  • 如果它不是无头的,它会尝试设置一个 Xserver(或类似的东西)。你有安装 xvfb 吗?
  • 我不确定。你能解释一下你的想法吗?
  • 如果你使用Graphics API,Java想要建立一个图形系统。这就是花费这么长时间并且可能会失败的原因(我不知道您的 Linux 设置)。作为替代方案,使用虚拟图形环境。 (如 xvfb)。也许这会有所帮助:stackoverflow.com/questions/39388037/…
  • Oracle 的这篇文章对于纯 Java 的无头示例可能会派上用场,您可以在 Clojure 中重写:oracle.com/technical-resources/articles/javase/headless.html
  • 还要检查这个答案,了解如何以编程方式正确设置无头模式(如果您没有从命令行传递选项):stackoverflow.com/a/2552470/483566

标签: clojure bufferedimage graphics2d


【解决方案1】:

实际上,我必须编写一个单独的 Java 程序才能查看问题所在。在看到 Java 异常后,我设法通过取消设置 Linux 变量 DISPLAY 来解决这个问题:unset DISPLAY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 2019-09-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多