Registrieren und Verwenden eines benutzerdefinierten java.net.URL-Protokolls

Ich habe versucht, ein @ aufzurufcustom url aus meinem Java-Programm, daher habe ich so etwas verwendet:

URL myURL;
try {
   myURL = new URL("CustomURI:");
   URLConnection myURLConnection = myURL.openConnection();
   myURLConnection.connect();
} catch (Exception e) {
   e.printStackTrace();
}

Ich habe die folgende Ausnahme:

java.net.MalformedURLException: unbekanntes Protokoll: CustomURI bei java.net.URL. (unbekannte Quelle) bei java.net.URL. (unbekannte Quelle) bei java.net.URL. (unbekannte Quelle) bei com.demo.TestDemo .main (TestDemo.java:14)

Wenn ich das @ auslöURI von einem Browser funktioniert es dann wie erwartet, aber wenn ich versuche, es aus dem @ aufzurufJava Program dann bekomme ich die obige Ausnahme.

BEARBEITEN

Nachstehend sind die Schritte aufgeführt, die ich versucht habe (mir fehlt auf jeden Fall etwas, lassen Sie es mich bitte wissen):

Schritt 1: Hinzufügen des benutzerdefinierten URI injava.protocol.handler.pkgs

Schritt 2: Auslösen des benutzerdefinierten URI über URL

Code

public class CustomURI {

public static void main(String[] args) {

    try {
        add("CustomURI:");
        URL uri = new URL("CustomURI:");
        URLConnection uc = uri.openConnection();            
        uc.connect();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static void add( String handlerPackage ){

    final String key = "java.protocol.handler.pkgs";

    String newValue = handlerPackage;
    if ( System.getProperty( key ) != null )
    {
        final String previousValue = System.getProperty( key );
        newValue += "|" + previousValue;
    }
    System.setProperty( key, newValue );
    System.out.println(System.getProperty("java.protocol.handler.pkgs"));

}

}

Wenn ich diesen Code ausführe, erhalte ich dasCustomURI: in meiner Konsole gedruckt (von der Add-Methode), aber dann bekomme ich diese Ausnahme, wenn dieURL wird mit @ initialisieCustomURI: als Konstruktor:

Exception in thread "main" java.lang.StackOverflowError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.net.URL.getURLStreamHandler(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at sun.misc.URLClassPath$FileLoader.getResource(Unknown Source)
at sun.misc.URLClassPath.getResource(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.net.URL.getURLStreamHandler(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)

Bitte Ratschläge, wie dies funktioniert.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage