我的 jar 在 Ubuntu 但不是 Windows 上运行
My jar runs on Ubuntu but not Windows
我在 NetBeans 中创建了一个 Java 项目,自动构建的分发文件 (.jar) 在我的 Ubuntu 15.04 AMD64 机器上运行得非常好。
我想在分发它之前确保它在 windows 上运行,但是在 windows 7 32 位机器上测试后我发现它不起作用。下面是错误消息的屏幕截图。
我可以猜到一些问题 - 因为它谈到了 .regex 错误。我并没有真正在我的代码中使用 regex,而是使用了 String.split,我认为它调用了 regex 包——它在我的 FileHandler class 的构造函数中。所以看起来这是一个问题。
您可以在 GitHub 上查看完整代码:
https://github.com/samredway/PwStore/tree/master/src/com/redway_soft/pwstore
目标机器上的Java版本是:1.8.0_45
在我的构建机器上也是如此。
非常感谢任何帮助。
编辑导致问题的特定部分似乎是我的 FileHandler class 的构造函数。看起来像这样:
public FileHandler() {
String path = this.getClass().getProtectionDomain().getCodeSource()
.getLocation().toString().substring(5);
String[] arry_path = path.split(File.separator);
path = "";
for (int i = 0, j = arry_path.length - 1; i < j; i++) {
path += arry_path[i] + File.separator;
}
PASSWORDS = path + "data" + File.separator + "passwords.sec";
}
这一行似乎是你的问题。
String[] arry_path = path.split(File.separator);
Windows 上的文件分隔符与 Ubuntu 等 Unix 操作系统上的文件分隔符不同。
Windows中使用的文件分隔符是\
,它是正则表达式中的一个特殊字符,需要转义以便正则表达式编译。
正如下面 nneonneo 所指出的,可以通过将行更改为:
轻松解决此问题
String[] arry_path = path.split(Pattern.quote(File.separator));
你在做
path.split(File.separator)
和 Windows 上的分隔符是 \
,这不是有效的正则表达式。
根据 ,尝试使用
path.split(Pattern.quote(File.separator))
相反。
我在 NetBeans 中创建了一个 Java 项目,自动构建的分发文件 (.jar) 在我的 Ubuntu 15.04 AMD64 机器上运行得非常好。
我想在分发它之前确保它在 windows 上运行,但是在 windows 7 32 位机器上测试后我发现它不起作用。下面是错误消息的屏幕截图。
我可以猜到一些问题 - 因为它谈到了 .regex 错误。我并没有真正在我的代码中使用 regex,而是使用了 String.split,我认为它调用了 regex 包——它在我的 FileHandler class 的构造函数中。所以看起来这是一个问题。
您可以在 GitHub 上查看完整代码:
https://github.com/samredway/PwStore/tree/master/src/com/redway_soft/pwstore
目标机器上的Java版本是:1.8.0_45 在我的构建机器上也是如此。
非常感谢任何帮助。
编辑导致问题的特定部分似乎是我的 FileHandler class 的构造函数。看起来像这样:
public FileHandler() {
String path = this.getClass().getProtectionDomain().getCodeSource()
.getLocation().toString().substring(5);
String[] arry_path = path.split(File.separator);
path = "";
for (int i = 0, j = arry_path.length - 1; i < j; i++) {
path += arry_path[i] + File.separator;
}
PASSWORDS = path + "data" + File.separator + "passwords.sec";
}
这一行似乎是你的问题。
String[] arry_path = path.split(File.separator);
Windows 上的文件分隔符与 Ubuntu 等 Unix 操作系统上的文件分隔符不同。
Windows中使用的文件分隔符是\
,它是正则表达式中的一个特殊字符,需要转义以便正则表达式编译。
正如下面 nneonneo 所指出的,可以通过将行更改为:
轻松解决此问题String[] arry_path = path.split(Pattern.quote(File.separator));
你在做
path.split(File.separator)
和 Windows 上的分隔符是 \
,这不是有效的正则表达式。
根据 ,尝试使用
path.split(Pattern.quote(File.separator))
相反。