我在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打开图形环境?
答案 0 :(得分:1)
不是ImageJ的专家,但看起来其中一个IJ插件正在创建其用户界面,尽管整个事情处于无头模式(所以问题不是来自IJ本身)。查找和修补插件以在无头模式下正常运行可能会很麻烦。
有一个解决方案适用于任何坚持打开UI的应用程序,但可以通过宏使用:提供虚拟帧缓冲区(使用xvfb
)并使其成为应用程序使用的显示。
只要没有任何阻止用户输入,这应该有效。这是使用ImageJ执行此操作的一些more information。它适用于斐济,一个衍生项目,但它显示了使用xvfb
的可能解决方案,它也应该与IJ本身一起使用。