我的应用程序启动并加载文件,如果我这样做: myApp /file:c:\nospaces.asd
从cmd
但如果我做myApp /file:c:\with spaces.asd
它不会工作,因为该程序收到两个参数: myApp /file:c:\with
和spaces.asd
。
我知道我可以做我的应用程序myApp "/file:c:\with spaces.asd"
,它会像这样从cmd
。 然而,这不是一个好的解决scheme,因为如果我双击.asd
文件(自定义扩展名)(并select与我的应用程序启动),那么main
不会获取参数作为一行,而是两个参数。
我怎么能解决这个问题,以便我的main
收到只有一个参数时,双击文件?
如果找不到文件,可以将参数连接在一起。 像这样的东西:
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。 所以如果你找到一个方法来传递一个""
包装文件名参数,不要这样做!
双击启动java将受到与Windows注册表相关的Windows注册表中的jar文件启动命令的影响。
这些是一些类似的问题,你可以看看:
在Windows上运行JAR文件
java可以从cmd运行jar,但不能通过双击运行
他们提到了确保在注册表c:\...\javaw.exe" -jar "%1" %
的可执行文件后面带有通配符的有用部分c:\...\javaw.exe" -jar "%1" %