2013-03-15 61 views
1

我将项目导出到jar时出现问题。当我在Eclipse中运行项目时,ResourceBundles工作正常,但不能从jar中运行。我将它导出为Export - > jar文件。在jar中找不到ResourceBundle

我在(Windows)cmd - > java -jar%projectName%.jar中启动jar。在把ResourceBundle是:

  • 的Eclipse:%项目名称% - > SRC - >语言
  • 在罐子里:文件夹的语言。

我加载这样说:

ResourceBundle.getBundle("language.Language", currentLocale) 

我看着#2这个很多其他的问题和他们的问题总是,他们并没有提供从根目录的路径。我不知道为什么这不起作用。我也尝试将这些.properties文件放在根目录中...

注意:管理这些软件包/语言环境的类也位于相同的软件包中。

在此先感谢。

编辑:也许一些额外的信息,我得到的字符串是这样的:

public static String getString(String key) { 
     try { 
      return ResourceBundle.getBundle("language.Language", currentLocale) 
        .getString(key); 
     } catch (MissingResourceException e) { 
      return "KEY " + key + " NOT FOUND !"; 
     } 
} 

堆栈跟踪:

Exception in thread "main" java.util.MissingResourceException: Can't find bundle 
for base name language.Language, locale nl_be 
     at java.util.ResourceBundle.throwMissingResourceException(Unknown Source) 
     at java.util.ResourceBundle.getBundleImpl(Unknown Source) 
     at java.util.ResourceBundle.getBundle(Unknown Source) 
     at language.LanguageModel.getString(LanguageModel.java:33) 
     at cli.class.method(class.java:35) 
     at main.Main.main(Main.java:26) 

性能:

Language_en_US.properties 
Language_fr_FR.properties 
Language_nl_BE.properties 
.... 
+0

打印异常的堆栈跟踪,并将其粘贴哟你的问题。并粘贴'jar -tf yourjar.jar'的结果 – 2013-03-15 22:06:40

+1

跟踪添加,您的命令给出:无法识别的选项:-tf 错误:无法创建Java虚拟机。 错误:发生了致命异常。程序将会退出。 – Aaron 2013-03-15 22:15:54

+0

该命令是'jar -tf jarFile.jar',而不是'java -jar -tf jarFile.jar'。但是堆栈跟踪足以识别问题。看到我的答案。 – 2013-03-15 22:33:42

回答

3

你通过语言环境在参数ResourceBundle.getBundle()有它的数量ry设置为“be”。应该设置为“BE”。

你也应该考虑使用只用langage代码后缀属性文件,并有不带后缀一个备份包都:

  • 语言:将在不得已
  • Language_nl使用:将使用当语言是“NL”
  • Language_nl_BE:应该从Language_nl覆盖翻译,如果他们具体到比利时
+1

我设置了currentLocale = new Locale(“nl_BE”);那是在首都吗? – Aaron 2013-03-15 22:39:34

+1

检查Locale的javadoc。它应该是'新Locale(“nl”,“BE”)'。该错误消息说:*找不到包 的基本名称language.Language,区域设置nl_be *。所以不,它不是大写字母。 – 2013-03-15 22:48:39

+1

啊,不知道。谢谢! – Aaron 2013-03-15 22:54:29