1

NetBeans6.8を使用して作成されたJavaアプリケーションを配布する必要があるときに問題が発生します。gettextをクラスファイルとして使用して作成された翻訳ファイルがいくつかあります-次のスクリプトを使用してgettextパッケージのmsgfmtで作成されています(シェルスクリプトはmsysで実行されます-ここでは問題ありません)

PO_FILES=`find . -iname "*_*.po"`
rm -f *.class

for PO_FILE in $PO_FILES; do
  CLASS_NAME=`echo $PO_FILE | sed "s/\.po$//" | sed "s/^.*\///"`
  echo "Compiling $PO_FILE to class $CLASS_NAME"
  msgfmt --java2 $PO_FILE -r $CLASS_NAME -d .
done

ディレクトリ構造は次のとおりです。

main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class 
lib/*.jar (many needed libraries - they work)

マニフェストファイルには、次のクラスパスがあります。

lib/xxx.jar ... lib/translate ... lib/yyy.jar (jar files are not the problem)

アプリケーションは、ロードできない翻訳ファイルを除いて問題なく動作します。読み込み部分は次のとおりです(クライアントはフランス語の翻訳を望んでいます)。

Locale.setDefault(Locale.FRANCE);
myResources = ResourceBundle.getBundle("Messages");

注:この問題は、jarファイルを使用して実行しようとした場合にのみ発生します(NetBeansからの実行は適切に機能し、コマンドラインからの実行はコンパイルされたクラスも機能しますが、jarファイル(java -jar main.jar)の実行時には機能しません。

面白いのは、マニフェストファイルからクラスパスを変更して「。」を追加すれば、この問題が発生しないことです。クラスパスへのパスとこのディレクトリ構造を持つ:

main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class 
lib/*.jar (many needed libraries - they work)
Messages_fr$1.class
Messages_fr.class

次のJavaバージョンでWindowsを使用しています。

C:\>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

D:\Program Files\Java\jdk1.6.0_17\bin>java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)

これがイライラするようになるので、私はどんな助けにも感謝します。

ありがとうございました、

イウリアン

4

1 に答える 1

1

(コメントで説明されているように)実際の問題は、jarファイルからのクラスパスに/がないことでした。たとえば、次のようなパスしかありません:path/myPathでは不十分でした。それを機能させるには、/(path / myPath /)を追加する必要がありました

于 2010-03-12T13:09:52.213 に答える