URI架构:无限命令提示正在打开

时间:2016-10-25 15:28:31

标签: java windows

我浏览了以下文档中心并尝试创建自己的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架构条目结构。对此有何帮助?

enter image description here

1 个答案:

答案 0 :(得分:2)

由于以下原因,您的解决方案最终会打开无限命令提示符

  1. 您注册了系统要激活的自定义URIOpen类的执行,当它必须处理myDocs:基于方案的URI时;
  2. 当自定义URIOpen类执行行Desktop.getDesktop().browse(java.net.URI.create(uri));时,系统将再次接收基于相同方案(myDocs:)的URI,并且它将再次激活一个新命令来执行您的类一次又一次......
  3. 可能你希望改变你的代码,就像那样:

        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块,看看它是否按要求工作。