我的应用启动并加载文件,如果我这样做:myApp /file:c:\nospaces.asd
来自cmd
,但如果我myApp /file:c:\with spaces.asd
它将无效,因为程序会收到两个参数:{{1} }和myApp /file:c:\with
。
我知道我可以spaces.asd
myApp "/file:c:\with spaces.asd"
,它会像cmd
那样工作。然而,这不是一个好的解决方案,因为如果我双击.asd
文件(自定义扩展名)(并选择使用我的应用程序启动),那么main
将不会将参数作为一行而是作为一行两个论点。
如何解决此问题,以便双击文件时我的main
只会收到一个参数?
答案 0 :(得分:1)
如果找不到文件,您可以将参数连接在一起。像这样:
public static void main(String[] args) {
String fileName = joinArgumentsToValidFileName(args);
}
public static String joinArgumentsToValidFileName(String[] args) {
if(args.length == 0) {
return "";
}
String fileName = args[0];
int index = 1;
while(!new File(fileName).exists() && index < args.length) {
fileName += " " + args[index];
index++;
}
return fileName;
}
这假定第一个参数(或参数)必须是文件名。可以通过以某种方式记住偏移索引来评估任何其他的agruments(不包括在上面的代码中)。
但请注意:这是将参数传递给应用程序的非标准行为,可能导致cunfusion。因此,如果您找到了传递""
包装文件名参数的方法,请不要这样做!
答案 1 :(得分:0)
双击启动java会受到在与Windows文件注册表相同的窗口中注册的jar文件启动命令的影响。
这些是一些类似的问题,您可以查看:
java can run jar from cmd but not by double clicking
他们提到了有用的部分,确保您在注册表c:\...\javaw.exe" -jar "%1" %