我浏览了以下文档中心并尝试创建自己的URI架构import java.awt.Desktop;
import java.io.IOException;
public class URIOpen {
public static void main(String args[]) {
if (args.length == 0) {
return;
}
String uri = args[0];
try {
Desktop.getDesktop().browse(java.net.URI.create(uri));
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
:
https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx
以下是我的Java程序。它需要一个命令行参数并在浏览器中返回URL。
"C:\Program Files (x86)\Java\jdk1.8.0_102\bin\java" -cp "C:\Users\Krishna\Documents\Study\Miscellaneous\examples" "URIOpen" "%1"
我更新了命令键的(默认)值字段,如下所示。
myDocs:http://google.com
当我尝试运行命令JoinAlias
时,我最终打开了无限的命令提示。
以下是我在注册表中的URI架构条目结构。对此有何帮助?
答案 0 :(得分:2)
由于以下原因,您的解决方案最终会打开无限命令提示符
URIOpen
类的执行,当它必须处理myDocs:
基于方案的URI时; URIOpen
类执行行Desktop.getDesktop().browse(java.net.URI.create(uri));
时,系统将再次接收基于相同方案(myDocs:
)的URI,并且它将再次激活一个新命令来执行您的类一次又一次...... 可能你希望改变你的代码,就像那样:
try {
java.net.URI theURI = java.net.URI.create(uri);
// System.out.println(theURI.getScheme()); => myDocs
String uriBrowsablePart = theURI.getRawSchemeSpecificPart();
// System.out.println(uriBrowsablePart); => http://google.com
Desktop.getDesktop().browse(java.net.URI.create(uriBrowsablePart));
// the above statement will open default browser on http://google.com
} catch (IOException e) {
System.out.println(e.getMessage());
}
尝试用我的建议替换你的try-catch块,看看它是否按要求工作。