Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的jar在Ubuntu上运行,但不在Windows上运行_Java_Ubuntu_Jvm_Cross Platform - Fatal编程技术网

Java 我的jar在Ubuntu上运行,但不在Windows上运行

Java 我的jar在Ubuntu上运行,但不在Windows上运行,java,ubuntu,jvm,cross-platform,Java,Ubuntu,Jvm,Cross Platform,我在NetBeans中创建了一个Java项目,自动构建的分发文件(.jar)在我的Ubuntu 15.04 AMD64机器上运行得非常好 在发布之前,我想确保它在windows上运行,但在Windows7 32位机器上测试后,我发现它不工作。下面是错误消息的屏幕截图 我可以猜到一些问题,因为它讨论了一个.regex错误。我在代码中并没有真正使用regex,而是使用String.split,我认为它调用了regex包——它位于FileHandler类的构造函数中。看来这是个问题 您可以在GitH

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

在发布之前,我想确保它在windows上运行,但在Windows7 32位机器上测试后,我发现它不工作。下面是错误消息的屏幕截图

我可以猜到一些问题,因为它讨论了一个.regex错误。我在代码中并没有真正使用regex,而是使用String.split,我认为它调用了regex包——它位于FileHandler类的构造函数中。看来这是个问题

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

目标计算机上的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";

}
public FileHandler(){
字符串路径=this.getClass().getProtectionDomain().getCodeSource()
.getLocation().toString()子字符串(5);
String[]arry_path=path.split(File.separator);
路径=”;
对于(int i=0,j=arry_path.length-1;i
这一行似乎是你的问题

String[] arry_path = path.split(File.separator);
Windows上的文件分隔符不同于像Ubuntu这样的Unix操作系统上的文件分隔符

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

如下文所述,通过将线路更改为:

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

这条线似乎是你的问题

String[] arry_path = path.split(File.separator);
Windows上的文件分隔符不同于像Ubuntu这样的Unix操作系统上的文件分隔符

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

如下文所述,通过将线路更改为:

String[] arry_path = path.split(Pattern.quote(File.separator));
你在干什么

path.split(File.separator)
在Windows上,分隔符是
\
,它不是有效的正则表达式

请尝试使用

path.split(Pattern.quote(File.separator))
相反。

你在做什么

path.split(File.separator)
在Windows上,分隔符是
\
,它不是有效的正则表达式

请尝试使用

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

相反。

那么我应该如何重写它,使其正确地跨平台呢?
String[]arry\u path=path.split(Pattern.quote(File.separator))
正如nneonneo所写,我在你第一次发布时接受了你的答案,但你应该将上面的评论粘贴到答案中,这样更容易看到,人们可以马上看到。那么我应该如何重写它以使其正确地跨平台呢?
String[]arry\u path=path.split(Pattern.quote(File.separator))
正如nneonneo所写,我在你第一次发布时接受了你的答案,但你应该将上面的评论粘贴到答案中,这样更容易看到,人们可以立即看到。下一个问题的提示:由于stacktrace提供了关于确切错误位置的信息,至少在问题中粘贴一些与该行相关的行。首先,你强迫人们前往一个外部站点,在下一次提交时,你将执行stacktrace中提到的行号变得基本无效,这大大降低了你的问题的有用性。我更新了问题以包含相关代码。谢谢,太好了,谢谢!这让这个问题对后人来说更有趣!请复制/粘贴文本(不仅字节更少,而且对搜索引擎友好),而不是嵌入文本的图像。要从Windows CLI复制文本,请在窗口中单击鼠标右键,选择“复制”,拖动要复制的文本,然后按enter键。下一个问题提示:由于stacktrace提供了有关确切错误位置的信息,请至少将与该行相关的多行粘贴到问题中。首先,你强迫人们前往一个外部站点,在下一次提交时,你将执行stacktrace中提到的行号变得基本无效,这大大降低了你的问题的有用性。我更新了问题以包含相关代码。谢谢,太好了,谢谢!这让这个问题对后人来说更有趣!请复制/粘贴文本(不仅字节更少,而且对搜索引擎友好),而不是嵌入文本的图像。要从Windows CLI复制文本,请在窗口中单击鼠标右键,选择“复制”,拖动要复制的文本,然后按enter键。