Pregunta

Quiero decir, ¿cómo decide Java qué protocolos están disponibles? Ejecuto algún código desde dentro de Eclipse, y funciona bien. Luego ejecuto el mismo código desde fuera de Eclipse, y obtengo '' protocolo desconocido '' MalformedURLException. Probablemente tiene que ver con el código base, o algo así? Cualquier consejo sería útil.

¡Gracias!

¿Fue útil?

Solución

El trabajo de resolución del protocolo lo realiza URLStreamHandler , que se almacenan en URL.handlers por protocolo en minúsculas. El controlador, a su vez, es creado por el URLStreamHandlerFactory en URL.factory . ¿Tal vez el eclipse esté de acuerdo con eso?

Algunos de los constructores de URL toman controladores de flujo y puede configurar la fábrica con URL.setURLStreamHandlerFactory .

Aquí hay una publicación web sobre desarrollo de controladores de protocolos .

Otros consejos

La forma estándar java de definir los controladores de protocolo se describe aquí: http://java.sun.com/developer/onlineTraining/protocolhandlers/

Esto se basa en que la clase de controlador de protocolo esté disponible en el cargador de clases de arranque (?). Eso no funciona bien con OSGi (y por lo tanto Eclipse). OSGi proporciona un contenedor alrededor de este mecanismo para permitir que los paquetes / complementos contribuyan con controladores de protocolo. Consulte: http://www.osgi.org/ javadoc / r4v41 / org / osgi / service / url / URLStreamHandlerService.html

Eclipse también proporciona su propio protocolo: bundle-resource (iirc) que definitivamente no funcionará fuera de Eclipse.

Probablemente un problema de classpath. Si está utilizando un protocolo que depende de alguna biblioteca (jar) que incluyó, y luego exportó un JAR desde eclipse, es probable que el código en ejecución no encuentre los archivos JAR que incluyó en su proyecto fuera del eclipse. Necesita un archivo de manifiesto en su jar que apunte a las bibliotecas que se necesitan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top