1

我在 ImageJ 中编写了一个宏来在 JPEG 图像文件列表上运行“测量”。我正在使用 headless.jar 以无头模式在远程 linux 机器上运行代码。

我得到以下异常 -

> java.awt.HeadlessException:  No X11 DISPLAY variable was set, but this
> program performed an operation which requires it.
>         at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
>         at java.awt.Window.<init>(Window.java:433)
>         at java.awt.Frame.<init>(Frame.java:403)
>         at ij.plugin.frame.PlugInFrame.<init>(PlugInFrame.java:13)
>         at ij.plugin.frame.Editor.<init>(Editor.java:89)
>         at ij.plugin.frame.Editor.<init>(Editor.java:85)
>         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>         at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>         at java.lang.Class.newInstance0(Class.java:355)
>         at java.lang.Class.newInstance(Class.java:308)
>         at ij.IJ.runPlugIn(IJ.java:156)
>         at ij.IJ.runPlugIn(IJ.java:141)
>         at ij.io.Opener.open(Opener.java:172)
>         at ij.IJ.open(IJ.java:1505)
>         at ij.macro.Functions.open(Functions.java:2325)
>         at ij.macro.Functions.doFunction(Functions.java:141)

我该如何覆盖这个?有没有办法阻止 ImageJ 打开图形环境?

4

1 回答 1

2

不是 ImageJ 专家,但看起来 IJ 插件之一正在创建它的用户界面,尽管整个事情都处于无头模式(所以问题不是来自 IJ 本身)。查找和修补插件以在无头模式下正确运行可能会很麻烦。

有一个解决方案适用于任何坚持打开 UI 的应用程序,但可以通过宏来使用:提供虚拟帧缓冲区(使用xvfb)并使其成为应用程序使用的显示。

只要没有阻止用户输入,这应该可以工作。这是使用 ImageJ 执行此操作的更多信息。它适用于斐济,一个衍生项目,但它显示了一个可能的解决方案,xvfb它也应该适用于 IJ 本身。

于 2012-10-11T10:45:03.620 回答