I'm facing a problem when I need to distribute my java application, created using NetBeans 6.8. I have some translation files made with gettext as class files - made with msgfmt from gettext package with the following script (shell script run under msys - no problems here)
PO_F开发者_运维百科ILES=`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
Here is the directory structure:
main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class
lib/*.jar (many needed libraries - they work)
The manifest file has the following class-path:
lib/xxx.jar ... lib/translate ... lib/yyy.jar (jar files are not the problem)
The application works without any problem except the translation files which cannot be loaded. The loading part is the following (the client wants a French translation):
Locale.setDefault(Locale.FRANCE);
myResources = ResourceBundle.getBundle("Messages");
Note: This problem appears only when trying to run with the jar file (running from NetBeans works well, running from command line the compiled classes work also but not when running the jar file (java -jar main.jar).
The funny part is that I don't have this problem if I modify the class-path from the manifest file and add "." path to the classpath and having this directory structure:
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
I am using Windows with the following Java versions:
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)
I appreciate any help as this becomes frustrating.
Thank you,
Iulian
The actual problem (as described in comments) was a missing / in the class path from the jar file. For example having only the path like this: path/myPath was not enough. I needed to add a / ( path/myPath/ ) to make it work
精彩评论