- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚在 Windows Netbeans 上的 IDE 中完成了 Telegram 机器人的编程。运行完美,没有任何问题。我的问题是,当我创建一个存储包以便将其上传到我自己的 Ubuntu VPS 中然后运行它(使用 java -jar PastaBot.jar)时,控制台显示此错误:
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name localisation.strings, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:1082)
at utils.LocalisationService.<init>(LocalisationService.java:74)
at utils.LocalisationService.getInstance(LocalisationService.java:62)
at pastabot.Pasta.populateDongers(Pasta.java:53)
at pastabot.Pasta.<init>(Pasta.java:29)
at pastabot.BotHandler.<init>(BotHandler.java:20)
at pastabot.TelegramBotJava.main(TelegramBotJava.java:26)
Caused by: java.lang.IllegalArgumentException: Malformed \uxxxx encoding.
at java.util.Properties.loadConvert(Properties.java:574)
at java.util.Properties.load0(Properties.java:391)
at java.util.Properties.load(Properties.java:341)
at java.util.PropertyResourceBundle.<init>(PropertyResourceBundle.java:138)
at java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:2687)
at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1501)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1465)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1419)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1419)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1361)
... 7 more
我不明白为什么我的 IDE 中一切正常,但在我的服务器中却无法启动。我知道这是与我的属性文件相关的问题,并且在大多数情况下,由于 strings.properties 文件位于错误的路径中而引发。
这是我的文件层次结构:
这是我的 build.xml 文件:也许我缺少其中的一个属性,但我不知道如何解决这个问题,因为我不太喜欢 xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<project name="Copypastabot" default="default" basedir=".">
<description>Builds, tests, and runs the project Copypastabot.</description>
<import file="nbproject/build-impl.xml"/>
<target name="package-for-store" depends="jar">
<property name="store.jar.name" value="PastaBot"/>
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
这是我用来获取正确的语言环境字符串的 LocalizationService 类,正如您在单例构造函数中看到的那样,我找到了(我认为正确的)本地化文件:
package utils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class LocalisationService {
private static LocalisationService instance = null;
private final HashMap<String, String> supportedLanguages = new HashMap<>();
private ResourceBundle english;
private ResourceBundle italian;
private class CustomClassLoader extends ClassLoader {
public CustomClassLoader(ClassLoader parent) {
super(parent);
}
public InputStream getResourceAsStream(String name) {
InputStream utf8in = getParent().getResourceAsStream(name);
if (utf8in != null) {
try {
byte[] utf8Bytes = new byte[utf8in.available()];
utf8in.read(utf8Bytes, 0, utf8Bytes.length);
byte[] iso8859Bytes = new String(utf8Bytes, "UTF-8").getBytes("ISO-8859-1");
return new ByteArrayInputStream(iso8859Bytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
utf8in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
public static LocalisationService getInstance() {
if (instance == null) {
synchronized (LocalisationService.class) {
if (instance == null) {
instance = new LocalisationService();
}
}
}
return instance;
}
private LocalisationService() {
CustomClassLoader loader = new CustomClassLoader(Thread.currentThread().getContextClassLoader());
english = ResourceBundle.getBundle("localisation.strings", new Locale("en", "US"), loader);
supportedLanguages.put("en", "English");
italian = ResourceBundle.getBundle("localisation.strings", new Locale("it", "IT"), loader);
supportedLanguages.put("it", "Italiano");
}
/**
* Get a string in default language (en)
* @param key key of the resource to fetch
* @return fetched string or error message otherwise
*/
public String getString(String key) {
String result;
try {
result = english.getString(key);
} catch (MissingResourceException e) {
result = "String not found";
}
return result;
}
/**
* Get a string in default language
* @param key key of the resource to fetch from localisations
* @param language code key for language (such as "EN" for english)
* @return fetched string or error message otherwise
*/
public String getString(String key, String language) {
String result;
try {
switch (language.toLowerCase()) {
case "en":
result = english.getString(key);
break;
case "it":
result = italian.getString(key);
break;
default:
result = english.getString(key);
break;
}
} catch (MissingResourceException e) {
result = english.getString(key);
}
return result;
}
public HashMap<String, String> getSupportedLanguages() {
return supportedLanguages;
}
public String getLanguageCodeByName(String language) {
return supportedLanguages.entrySet().stream().filter(x -> x.getValue().equals(language)).findFirst().get().getKey();
}
}
我已经寻找解决方案,但没有任何帮助:strings_en.properties 位置正确,所以我无法了解发生了什么。直到昨天我才被这个问题困扰,这让我发疯。
你们可以帮帮我吗?谢谢:)
最佳答案
我找到了编辑 strings.properties 文件的解决方案:像这样的字符串
hello\user
抛出 IllegalArgumentException ,这会导致程序崩溃,因此它不会加载任何内容(这就是它无法检索 strings_en.properties 的原因)。相反,最好像这样转义“\”:
hello\\user
这是因为程序尝试将\user 编码为十六进制值,但事实并非如此。包含大量由非拉丁字符组成的字符串(例如一行 ascii 笑脸)的属性文件可能是一个真正麻烦的问题,因为通常使用\u 字符。
关于java - MissingResourceException 但资源并未丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810668/
我正在使用一个用 JFrame 实现 GUI 的程序进行练习。程序的语言可以通过使用名称如“messages_xy”(xy 是语言的缩写)的属性来个性化。 现在,当我启动 Java 应用程序时,我收到
为什么这会抛出 MissingResourceException ?是我弄错了还是不是ListResourceBundles 的重点是在代码中提供资源? public class Hello exte
我有 2 个 java 应用程序,第二个应用程序作为 jar 文件添加到第一个应用程序,第一个应用程序作为 JBOSS 中的工作流部署。 第二个应用程序的 .property 文件未包含在 jar 中
我刚刚在 Windows Netbeans 上的 IDE 中完成了 Telegram 机器人的编程。运行完美,没有任何问题。我的问题是,当我创建一个存储包以便将其上传到我自己的 Ubuntu VPS
我正在尝试添加一个选项来更改程序中的语言,问题是我找不到正确的使用路径,而且我一直得到一个 java.util.MissingResourceException: Can't find bundle
我在运行应用程序时遇到异常。此应用程序读取 abc.properties 文件, Exception in thread "main" java.util.MissingResourceExcepti
我知道在 stackoverflow 和其他论坛上有很多关于这个错误的问题和答案。但是我还是找不到解决方案... 出于速度原因,我有一个实用程序类,它根据提供的语言环境加载所有静态数据映射(例如几个月
大家好, 我正在创建一个 ResourceBundle 来加载属性文件。我的文件结构如下所示 |---主要 | ----ResourceBundleLoad.java |--资源
我正在尝试从文件位置读取属性文件。但是,资源包无法找到该文件并引发以下异常 我尝试将该文件保留在类路径下,但未能成功读取该文件。但是,我的目的是从文件路径读取属性文件,这来自用户。因此,我的类可以读取
我正在从事一个涉及加载 ResourceBundle 的项目。更明确地说,我创建了一个扩展 ListResourceBundle 的类。该类称为 Resources.java。它编译一切正常,但每次我
这个错误一直困扰着我。我似乎无法理解为什么 Eclipse 无法读取就在那里的资源。我已经在“配置包含”对话框中检查了类路径。我还使用该文件的完全限定名称。 AutomateWaveClose s
我正在尝试使用自定义记录阅读器、映射器和缩减器设置一个简单的 mapReduce 应用程序。直到(包括)映射器它似乎工作(调用 context.write 时我在控制台上写出键值对以进行测试)。 然后
我以前多次使用 JDBC 都没有任何问题,但由于某种原因在我的新服务器上它无法正常工作。代码在我的主机上编译和运行良好,所有库(包括 JDBC)都应该编译到我运行的单个 JAR 中。 基本代码: tr
我正在使用 this 中的代码使用 MXJ 将 MySQL“嵌入”到我的 Java 应用程序中的教程。但是,我在运行代码时遇到了这个异常: Exception in thread "main" jav
我正在编写一个使用 MQTT 的 Android 应用程序。 在发布构建中,我遇到了一个异常: MqttClient client = new MqttClient(host, clientId, n
当我在应用程序上运行方法时,出现以下异常,但缺少“JarSignerResources”的类位于我的类路径中(tools.jar 的一部分)。我以前从未见过这样的异常,它只发生在Linux(而不是OS
我对 Vaadin 框架还很陌生,我正在尝试制作一个国际化的应用程序。我正在使用 NetBeans,并且已按照以下步骤操作: 创建一个新的 Vaadin 项目,其中包含一个 UI 类和一个其上的文本字
我已经搜索过,但没有结果。运行 JSF 应用程序时,我在控制台中收到此错误。 我正在尝试按照教程将基本的 messages.properties 文件添加到我的计算器应用程序中。该教程说“如果您使用
为了国际化我的代码,我使用名为 MessagesBundle_en_UK.properties 的属性文件,该文件位于名为 config 的资源文件夹中,以便我具有以下结构: +---src
我在迭代键数组并调用资源包上的 getString() 方法时遇到了这个问题。我的包中有我需要的所有映射,但由于某种原因,其中一个资源将不会被获取。这只是 Linux Ubunthu 9 中的问题。它
我是一名优秀的程序员,十分优秀!