11

ショートストーリー

すべてのJava呼び出しに対してjava.awt.headlessプロパティをに設定するシステムレベルの方法が必要です。つまり、Javaはアクセスできない場所から呼び出されているため(たとえば、Java / Cなどで記述された別のツール内から)、使用することはできません。true -Djava.awt.headless=true

長い話

私は、AWTクラスに依存するJavaで記述された一連のツール(特にAdobeのAir ADT)を使用しています。これらのツールをコンソールで実行すると、正常に動作します。しかし、SSHセッションから実行すると、で失敗しjava.lang.InternalError: Can't connect to window server - not enough permissionsます。グーグルで調べてみると、java.awt.headlessをtrueに設定すると問題が解決することがわかりました。そうではありません。これは、ADT自体が。なしで子Javaプロセス -Djava.awt.headless=true生成するためです。

Javaが呼び出されるたびにこのプロパティが設定されるようにするシステムレベルの方法はありますか?たぶん、いくつかのシステムawtプロパティファイルまたは同等のもの?

最悪のシナリオ/usr/bin/javaでは、この引数をに追加するシェルスクリプトに置き換えてみることができます"$@"が、それを避けたいと思っています。(更新:私の理論が正しいことを確認するために、このシェルスクリプトハックを試してみてください。問題は解決します。よりクリーンな解決策を期待しています)

4

3 に答える 3

19

_JAVA_OPTIONSの代わりに使用しJAVA_OPTSます。 _JAVA_OPTIONSJava を実行すると、自動的に取得されます。

export _JAVA_OPTIONS=-Djava.awt.headless=true
adt ... 

これは OS X にも当てはまります。 これは、これが Windows と Linux でも機能する可能性があることを示しています。

于 2012-12-12T22:40:13.693 に答える
2

これを行う標準的な方法はないようです。これは私が思いつくことができる最高のものです:

  1. /usr/bin/javaに名前を変更/usr/bin/java.ori
  2. /usr/bin/java755 権限で次の置換を作成します。

    #!/bin/bash
    java.ori $JAVAOPT "$@"
    

    次に、環境変数JAVAOPTを使用してグローバル Java オプションを設定できます。これらは、生成される可能性のあるすべての Java サブプロセスにも伝播されます。

    export JAVAOPT=-Djava.awt.headless=true
    adt ...
    
于 2012-06-06T16:44:10.160 に答える