Java中的HeadlessException - ImageJ

时间:2012-10-11 10:17:41

标签: java exception-handling headless imagej

我在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打开图形环境?

1 个答案:

答案 0 :(得分:1)

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

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

只要没有任何阻止用户输入,这应该有效。这是使用ImageJ执行此操作的一些more information。它适用于斐济,一个衍生项目,但它显示了使用xvfb的可能解决方案,它也应该与IJ本身一起使用。