Java 我的jar在Ubuntu上运行,但不在Windows上运行
我在NetBeans中创建了一个Java项目,自动构建的分发文件(.jar)在我的Ubuntu 15.04 AMD64机器上运行得非常好 在发布之前,我想确保它在windows上运行,但在Windows7 32位机器上测试后,我发现它不工作。下面是错误消息的屏幕截图 我可以猜到一些问题,因为它讨论了一个.regex错误。我在代码中并没有真正使用regex,而是使用String.split,我认为它调用了regex包——它位于FileHandler类的构造函数中。看来这是个问题 您可以在GitHub上看到完整的代码: 目标计算机上的Java版本为:1.8.0_45 在我的构建机器上也是如此 非常感谢您的帮助 编辑导致问题的特定部分似乎是FileHandler类的构造函数。看起来是这样的: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
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键。