Pergunta

Quer dizer, como é que Java decidir quais protocolos estão disponíveis? Eu corro algum código de dentro do Eclipse, e ele funciona muito bem. Então eu executar o mesmo código de fora Eclipse, e eu recebo "protocolo desconhecido" MalformedURLException. Provavelmente tem a ver com a base de código, ou algo assim? Alguma dica seria útil.

Obrigado!

Foi útil?

Solução

O trabalho de resolver o protocolo é feito pelo URLStreamHandler , que são armazenados em URL.handlers pelo protocolo em letras minúsculas. O manipulador, por sua vez, é criado pelo URLStreamHandlerFactory em URL.factory. Talvez eclipse é monkeying com isso?

Alguns dos URL construtores tomar manipuladores de fluxo e pode definir a fábrica com URL.setURLStreamHandlerFactory .

Aqui está um post web sobre desenvolvimento manipuladores de protocolo .

Outras dicas

A forma padrão java de definir manipuladores de protocolo é descrito aqui: http://java.sun.com/developer/onlineTraining/protocolhandlers/

Esta baseia-se na classe de manipulador de protocolo de estar disponível no boot (?) Carregador de classe. Isso não funciona bem com OSGi (e, portanto, Eclipse). OSGi fornece um invólucro em torno deste mecanismo para permitir feixes / encaixes para contribuir manipuladores de protocolo. Veja: http://www.osgi.org/ javadoc / r4v41 / org / osgi / serviço / url / URLStreamHandlerService.html

Eclipse também fornece seu próprio protocolo: pacote de recursos (IIRC) que definitivamente não vai funcionar fora do Eclipse

.

Provavelmente uma questão classpath. Se você estiver usando um protocolo que depende de alguma biblioteca (jar) você incluído, e, em seguida, exportou um JAR do eclipse, os arquivos JAR que você incluiu em seu projeto são provavelmente não sendo encontrada pelo lado de fora código de execução de eclipse. Você precisa de um arquivo de manifesto em seu frasco que irá apontar para as bibliotecas que são necessárias.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top