2016-10-25 28 views
4

我通過下面的文檔中心去,並試圖創建自己的URI模式myDocshttps://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspxURI模式:無限命令提示正在打開

以下是我的Java程序。它接受一個命令行參數並在瀏覽器中返回URL。

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()); 
     } 
    } 
} 

我更新瞭如下所示的命令鍵的(默認)值字段。

"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,我結束了無限打開命令提示符。

以下是我在註冊表中的URI架構條目結構。對此有何幫助?

enter image description here

回答

2

您的解決方案最終會打開無限的命令提示是因爲:

  1. 您註冊自定義URIOpen類的執行由系統激活時,它必須處理myDocs:的基於方案的URI;
  2. 後,自定義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塊,看看它是否工作要求。

相關問題