Domanda

Voglio dire, come fa Java a decidere quali protocolli sono disponibili? Eseguo un po 'di codice dall'interno di Eclipse e funziona perfettamente. Quindi eseguo lo stesso codice dall'esterno di Eclipse e ottengo il "protocollo sconosciuto". MalformedURLException. Probabilmente ha a che fare con la base di codice o qualcosa del genere? Eventuali suggerimenti sarebbero utili.

Grazie!

È stato utile?

Soluzione

Il lavoro di risoluzione del protocollo è svolto da URLStreamHandler , che sono memorizzati in URL.handlers dal protocollo in minuscolo. Il gestore, a sua volta, è creato dal URLStreamHandlerFactory in URL.factory . Forse eclissi è scimmie con quello?

Alcuni dei costruttori di URL accetta i gestori di stream e puoi impostare la fabbrica con URL.setURLStreamHandlerFactory .

Ecco un post web su sviluppo di gestori di protocollo .

Altri suggerimenti

Il modo standard Java di definire i gestori di protocollo è descritto qui: http://java.sun.com/developer/onlineTraining/protocolhandlers/

Questo dipende dal fatto che la classe del gestore di protocollo sia disponibile nel classloader di avvio (?). Questo non funziona bene con OSGi (e quindi Eclipse). OSGi fornisce un wrapper attorno a questo meccanismo per consentire a bundle / plug-in di contribuire con i gestori di protocollo. Vedi: http://www.osgi.org/ javadoc / r4v41 / org / OSGi / servizio / url / URLStreamHandlerService.html

Eclipse fornisce anche il proprio protocollo: bundle-resource (iirc) che sicuramente non funzionerà al di fuori di Eclipse.

Probabilmente un problema con il percorso di classe. Se stai usando un protocollo che dipende da alcune librerie (jar) che hai incluso e quindi hai esportato un JAR da eclipse, probabilmente i file JAR che hai incluso nel tuo progetto non vengono trovati dal codice in esecuzione al di fuori di eclipse. È necessario un file manifest nel vaso che indicherà le librerie necessarie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top