我的 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))

相反。