Runtime e classpath

Pessoal,

Tenho um série de dúvidas sobre o Runtime.

A partir de onde(diretório) ele executa uma operação? Se eu executo um comando dir, ele imprimirá que diretório, o raiz? No windows seria equivalente a imprimir o que está no c:?

Tentei fazer a seguinte chamada

Runtime.getRuntime().exec(“java Ocr”);

A class Ocr.class está em c:\ e recebi o erro: java.lang.NoClassDefFoundError: Ocr

Interpretei que este erro é devido a necessidade de setar o classpath, pois, uso vários pacotes .JAR pra rodar a classe.

Tentei colocar os pacotes na chamada da função. Pra simplificar vou colocar apenas um pacote e mostrar o que acontece.

Runtime.getRuntime().exec(“java classpath=c:\j2sdk1.4.2_04\lib\mlibwrapper_jai.jar Ocr”);

Recebo a seguinte mensagem:

java.lang.NoClassDefFoundError: classpath=c:\j2sdk1/4/2_04\lib\mlibwrapper_jai/jar …

DETALHE: trocou-se o ponto (.) por barra (/).
Adianto que tentei colocar /, \ de todas as formas imagináveis pra fazer aparecer o ponto e nada.

Existe uma forma mais simples de setar o classpath?

Por que a MVJ não reconheceu as variáveis de ambiente do sistema operacional?

Abraços.

Fabrício

Provavelmente o diretório do Runtime é o diretório corrente, ou seja, o dir da qual você iniciou sua aplicação.

http://www.guj.com.br/java.artigo.108.1.guj
Isso vai te ajudar a entender.

Lipe,

 Obrigado pelo manual. Confesso que não entendi que tipo de informação o mesmo pode me auxiliar a resolver o problema.
 Como, em código, você resolveria o problema?
 Muito Obrigado.

  Fabrício

Runtime.getRuntime().exec(“java -cp c:/j2sdk1.4.2_04/lib/mlibwrapper_jai.jar Ocr”);

[quote=fimbrizi]Runtime.getRuntime().exec(“java classpath=c:\j2sdk1.4.2_04\lib\mlibwrapper_jai.jar Ocr”);

Recebo a seguinte mensagem:

java.lang.NoClassDefFoundError: classpath=c:\j2sdk1/4/2_04\lib\mlibwrapper_jai/jar …

DETALHE: trocou-se o ponto (.) por barra (/).
Adianto que tentei colocar /, \ de todas as formas imagináveis pra fazer aparecer o ponto e nada.[/quote]

Voce nao indicou o classpath na sintaxe correta - o java pensou que “classpath=blabla” eh a classe que voce quer executar. :smiley:

[quote=fimbrizi]Existe uma forma mais simples de setar o classpath?

Por que a MVJ não reconheceu as variáveis de ambiente do sistema operacional?[/quote]

Entao - o tutorial que o Lipe indicou eh pra isso. Depois que comecei a utilizar o Eclipse apaguei esse tipo de coisa da minha cabeca. :mrgreen:

Em todo caso, uma possibilidade seria voce criar um arquivo JAR, indicar o classpath no Manifest (creio que da pra fazer isso) e entao rodar com “java -jar pacotinho.jar”. Bem mais simples - ha uns dias atras precisei empacotar uma app pra outra pessoa rodar e fiz isso. Soh que o meu JAR era independente, nao precisava de outras coisas no classpath como o teu.

Marcio Kuchma

Pessoal,

 Resolvi o problema. Usei um pouco do comentário de cada e segue abaixo a solução:

 Runtime.getRuntime().exe("java -cp C:\\j2sdk1.4.2_04\\jre\\lib\\ext\\mlibwrapper_jai.jar;C:\\Ocr.jar Ocr");

 Utilizei as barras duplas, pois, do contrário tinhamos um erro em tempo de compilação.

 Usei o parâmetro "-cp" que o danieldestro sugeriu e o problema do ponto ser substituido por barra foi solucionado. Mas somente isto não resolveu meu problema, pois continuava a aparecer a mensagem abaixo:

java.lang.NoClassDefFoundError: Ocr

 Para resolver o problema usei a dica do kuchma e do Lipi e empacotei minha classe Ocr.class num JAR. A grosso modo, compactei com ZIP e substitui o .ZIP por .JAR.

 Pronto. Funcionou!

 Muito Obrigado

 Fabrício

Caramba! Autentico trabalho de equipe. :mrgreen:

Marcio Kuchma