1

JPEG 画像ファイルのリストに対して「測定」を実行するために、ImageJ にマクロを作成しました。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 プラグインの 1 つがユーザー インターフェイスを作成しているようです (したがって、問題は IJ 自体に起因するものではありません)。ヘッドレス モードで正しく動作するようにプラグインを見つけてパッチを適用するのは、おそらく面倒です。

UI を開くことを主張するすべてのアプリケーションで機能するが、マクロを介して使用できるソリューションがあります。仮想フレームバッファを提供し (を使用xvfb)、これをアプリケーションが使用するディスプレイにします。

これは、ユーザー入力をブロックするものがない限り機能します。ImageJ でこれを行うための詳細情報を次に示します。派生プロジェクトであるフィジー向けですが、xvfbIJ自体でも機能するはずの使用可能なソリューションを示しています。

于 2012-10-11T10:45:03.620 に答える