我正在 Solaris 上创建旧的 awt / swing 项目(不属于我的属性)。源代码和 jar 文件已经给了我。当我在 eclipse上运行它时会出现问题:我收到与字符串解析相关的错误(将字符串十六进制解析为整数)。但是,当我从jar运行它时,没有错误发生。实际上,当我将项目导出为新的可运行Jar文件时,它可以正常运行。
我已经尝试过搞乱项目中使用的java版本。我已经将eclipse配置为仅适用于1.6.0_31-b04版本。打印系统属性表明,eclipse和控制台上的java运行时版本是相同的。
eclipse上的错误消息:
java.lang.NumberFormatException: For input string: "7003fffd03"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at java.lang.Integer.decode(Unknown Source)
...
我指出:当我在控制台上运行导出的Jar时,没有错误生成并且一切正常。
我没有要求提供这么少信息的解决方案。我很感激你能给我的任何假设。
答案 0 :(得分:0)
从二进制文件中读取结果是鲁莽的。 在不同的环境中,将二进制数据转换为字符串可能会返回不同的结果。 解决方法是在读取数据时使用特定的 charset 。
String strFileContents = "";
byte[] contents = new byte[1024];
int bytesRead = 0;
while (dataInputStream.available() != 0) {
while ((bytesRead = bufferedInputStream.read(contents)) != -1) {
strFileContents = new String(contents, 0, bytesRead, "ISO-8859-1");
}
}
现在在eclipse中运行项目并从任何系统上的jar文件运行都会产生相同的结果。