【发布时间】: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