【问题标题】:My jar runs on Ubuntu but not Windows我的 jar 可以在 Ubuntu 上运行,但不能在 Windows 上运行
【发布时间】:2015-07-12 05:46:39
【问题描述】:

我在 NetBeans 中创建了一个 Java 项目,并且自动构建的分发文件 (.jar) 在我的 Ubuntu 15.04 AMD64 机器上运行得非常好。

我想在分发它之前确保它在 Windows 上运行,但在 Windows 7 32 位机器上测试后发现它不起作用。以下是错误消息的屏幕截图。

我可以猜到一些问题 - 因为它谈到了 .regex 错误。我并没有真正在我的代码中使用正则表达式,而是使用我认为调用正则表达式包的 String.split - 那是在我的 FileHandler 类的构造函数中。所以看起来这是一个问题。

您可以在 GitHub 上查看完整代码:

https://github.com/samredway/PwStore/tree/master/src/com/redway_soft/pwstore

目标机器上的Java版本是:1.8.0_45 在我的构建机器上也是如此。

非常感谢任何帮助。

编辑导致问题的特定部分似乎是我的 FileHandler 类的构造函数。看起来像这样:

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";

}

【问题讨论】:

  • 提示您的下一个问题:由于堆栈跟踪提供了有关确切错误位置的信息,因此至少将与该行相关的一些行粘贴到问题中。首先,您强迫人们前往外部站点,并且在下一次提交时,您将在堆栈跟踪中引用的行号变得基本上无效,从而大大降低了您的问题的有用性。
  • 我更新了问题以包含相关代码。谢谢。
  • 太棒了,谢谢!这让这个问题对后代来说变得更加有趣!
  • 请复制/粘贴文本(不仅字节少,而且对搜索引擎友好),而不是嵌入文本图像。要从 Windows CLI 复制文本,请在窗口中单击鼠标右键,选择复制,拖动要复制的文本,然后按 Enter 键。

标签: java ubuntu jvm cross-platform


【解决方案1】:

这条线似乎是你的问题。

String[] arry_path = path.split(File.separator);

Windows 上的文件分隔符与 Ubuntu 等 Unix 操作系统上的不同。

Windows 中使用的文件分隔符是\,这是正则表达式中的特殊字符,需要转义才能编译正则表达式。

正如下面nneonneo 所指出的,这可以通过将行更改为:

String[] arry_path = path.split(Pattern.quote(File.separator));

【讨论】:

  • 那么我应该如何重写它以使其正确跨平台?
  • String[] arry_path = path.split(Pattern.quote(File.separator)) nneonneo 在下面写道
  • 我接受了您第一次发布的答案,但您应该将上面的评论粘贴到答案中,这样它会更明显,人们可以立即看到。
【解决方案2】:

你在做

path.split(File.separator)

在 Windows 上,分隔符是 \,它不是有效的正则表达式。

根据https://stackoverflow.com/a/2736278/1204143,尝试使用

path.split(Pattern.quote(File.separator))

改为。

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多