문제

NetBeans 6.8을 사용하여 생성 된 Java 응용 프로그램을 배포해야 할 때 문제에 직면 해 있습니다. GetText 패키지에서 MSGFMT로 만든 GetText로 만든 번역 파일이 있습니다. 다음 스크립트가 있습니다 (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)

이것이 실망스러워지면 도움이됩니다.

고맙습니다,

iulian

도움이 되었습니까?

해결책

실제 문제 (주석에 설명 된 바와 같이)는 JAR 파일의 클래스 경로에서 누락 /에 있습니다. 예를 들어 다음과 같은 경로 만있는 경우 : Path/MyPath로는 충분하지 않았습니다. 작동하기 위해/ (Path/ MyPath/)를 추가해야했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top