Pessoal, em que parte do codigo é gerado exception por falta de uma lib externa???
tipo, configuro o class-path: lib/my_lib.jar
porem o usuario apaga e quando o mesmo for executar o programa, levantar um JOptionPane avisando que esta faltando a tal lib??
no meu caso eu uso jakarta mail
A exceção é lançada quando se tenta usar a classe que está faltando. Uma solução é capturar a NoClassDefFoundException, que é a exceção lançada quando não se acha determinada classe (típico erro de jar não encontrado).
R
RafaelVS
além de NoClassDefFoundException, tb tem ClassNotFoundException, mas não lembro a diferença em que um das duas é lançada e em que circunstâncias.
R
RaphaelSantos
certo, mas onde, no codigo, eu poderia fazer isso?
tentei fazer try catch em um monte de parte mas nao aparece a mensagem...
coloquei no main
, tb tentei no getJContentPane(); porem em todos, qdo tento executar sem colocar a lib aparece a mensagem could not find the main class. Program will exit...
T
thingol
Dica: se você realmente acha que seu usuário é cabeça suficiente para rodar sua aplicação sem ter algum dos jars necessários, você precisa fazer o seguinte:
No seu programa principal, antes mesmo de apresentar qualquer tela, você tenta instanciar (usando Class.forName), para cada jar que você sabe que é necessário, uma classe presente nesse jar. Se por acaso você receber uma ClassNotFoundException, você já trata antes de tudo (antes mesmo de chamar seu frame principal).
Exemplo: digamos que você precise de activation.jar e mail.jar. Você sabe que uma classe que existe em activation.jar é javax.activation.DataHandler e uma classe que existe em mail.jar é javax.mail.Message.
Faça então algo parecido com:
try{
Class.forName("javax.activation.DataHandler",false,null);
}catch(ClassNotFoundExceptionex){
JOptionPane.....("O arquivo activation.jar não está presente no CLASSPATH. Abortando..");System.exit(1);
}
try{
Class.forName("javax.mail.Message",false,null);
}catch(ClassNotFoundExceptionex){
JOptionPane.....("O arquivo mail.jar não está presente no CLASSPATH. Abortando..");System.exit(1);
}
R
RaphaelSantos
thingol, ja tou enchendo o saco ne
bom, o que é e como e quando se usa esse formato Class?
sobre seu exemplo, funcionou, funcionou bem ate d+
minhas libs estao numa pasta lib e eu coloquei
try {
Class.forName ("/lib/javax.activation.DataHandler", false, null);
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null,"O arquivo activation.jar não está presente no CLASSPATH. Abortando..");
System.exit (1);
}
ai o programa sempre levanta a excessao mesmo a lib estando la
T
thingol
Class.forName pede um nome de classe, uai (como mostrei). Que mania é essa de mudar o exemplo? Não pus nenhum “lib” lá, e não é para pôr nenhum “/lib”. Se tiver dúvida, consulte o javadoc da classe java.lang.Class.
R
RaphaelSantos
thingol:
Class.forName pede um nome de classe, uai (como mostrei). Que mania é essa de mudar o exemplo? Não pus nenhum “lib” lá, e não é para pôr nenhum “/lib”. Se tiver dúvida, consulte o javadoc da classe java.lang.Class.
eu mudei pq inicialmente, do jeito que vc psotou nao pegou tb…ai pensei que poderia ser por causa da pasta… mas ja fiz um monte de combinação tentando colocar inclusive o jar completo como activation.jar e nenhum caso ele passa do try
T
thingol
Hum, o exemplo que dei tinha um furo, é para usar: