Aplicação Desktop não localiza arquivo de propriedades
Boa tarde.
Estou com o seguinte problema e gostaria da ajuda de vocês para resolvê0lo.
Tenho uma aplicação desktop Java SE 1.5 que recebe algumas informações via arquivo de propriedades e outras através da leitura de alguns arquivos txt.
Em tempo de desenvolvimento, tudo funciona perfeitamente, porém, quando chamo o .JAR da aplicação através de linha comando, as propriedades não são localizadas, assim como aplicação não localiza os arquivos txt.
Acredito que o problema esteja no local que esses arquivos estão (raiz da aplicação).
Mas pq em desenvolvimento funciona e depois não?
Onde devo colocar esses arquivos?
Obrigado e no aguardo.
Estou com o seguinte problema e gostaria da ajuda de vocês para resolvê0lo.
Tenho uma aplicação desktop Java SE 1.5 que recebe algumas informações via arquivo de propriedades e outras através da leitura de alguns arquivos txt.
Em tempo de desenvolvimento, tudo funciona perfeitamente, porém, quando chamo o .JAR da aplicação através de linha comando, as propriedades não são localizadas, assim como aplicação não localiza os arquivos txt.
Acredito que o problema esteja no local que esses arquivos estão (raiz da aplicação).
Mas pq em desenvolvimento funciona e depois não?
Onde devo colocar esses arquivos?
Obrigado e no aguardo.
Alan Santos
Curtidas 0
Respostas
Dyego Carmo
08/10/2009
O ideal que quando voce fizer o acesso ao arquivo voce especifique o PATH inteiro do arquivo...
ex:
Nao crie um arquivo assim:
File arquivo = new File("meuArquivo.txt");
Crie assim:
Agora o problema é saber qual o diretorio que voce esta atualmente certo ? Simples:
Tente um:
File arquivo = new File(System.getProperty("user.dir")+"/meuArquivo.txt");
Valeu !
ex:
Nao crie um arquivo assim:
File arquivo = new File("meuArquivo.txt");
Crie assim:
Agora o problema é saber qual o diretorio que voce esta atualmente certo ? Simples:
Tente um:
File arquivo = new File(System.getProperty("user.dir")+"/meuArquivo.txt");
Valeu !
GOSTEI 0
Alan Santos
08/10/2009
Legal, entendi o conceito.
Mas o diretório do usuário é aquele onde o comando "java -jar ..." for executado, certo?
Sendo assim, como faço para saber o diretório raiz da aplicação, independente de onde for executado o comando?
Obrigado
Mas o diretório do usuário é aquele onde o comando "java -jar ..." for executado, certo?
Sendo assim, como faço para saber o diretório raiz da aplicação, independente de onde for executado o comando?
Obrigado
GOSTEI 0
Dyego Carmo
08/10/2009
Nao tem como saber...
OU voce define um padrao ex: sempre no c:\MeuDir
OU voce passa o diretorio como parametro da JVM e dae recupera em tempo de execucao:
java -DMeuDiretorioDoArquivo=c:\MeuDir arquivo.jar
Lah dentro voce recupera com System.getProperties()
OU voce define um padrao ex: sempre no c:\MeuDir
OU voce passa o diretorio como parametro da JVM e dae recupera em tempo de execucao:
java -DMeuDiretorioDoArquivo=c:\MeuDir arquivo.jar
Lah dentro voce recupera com System.getProperties()
GOSTEI 0
Alan Santos
08/10/2009
Entendi... resolvi o problema declarando o classpath no atalho do windows.... mas não acho uma solução muito correta.
Tem como detalhar o classpath no comando java (ou javaw) ?
Diego, um tempo atrás vc respondeu uma dúvida minha sobre controlar transações do JBoss com o TopLink...
Fizemos diversos testes e fiquei de lhe dar um feedback depois... sorry pela demora, mas segue a solução que adotamos.
Foi necessário customizar uma classe para controlar a transação.
public class JBossTransactionController extends JTATransactionController{
public JBossTransactionController() {
System.out.println("Yes");
}
public TransactionManager acquireTransactionManager() throws Exception {
TransactionManager tm = (TransactionManager)jndiLookup("java:/TransactionManager");
return tm;
}
No persistence.xml:
<property name="toplink.target-server" value="br.org.acnsf.util.JBossTransactionController"/>
Valeu
Tem como detalhar o classpath no comando java (ou javaw) ?
Diego, um tempo atrás vc respondeu uma dúvida minha sobre controlar transações do JBoss com o TopLink...
Fizemos diversos testes e fiquei de lhe dar um feedback depois... sorry pela demora, mas segue a solução que adotamos.
Foi necessário customizar uma classe para controlar a transação.
public class JBossTransactionController extends JTATransactionController{
public JBossTransactionController() {
System.out.println("Yes");
}
public TransactionManager acquireTransactionManager() throws Exception {
TransactionManager tm = (TransactionManager)jndiLookup("java:/TransactionManager");
return tm;
}
No persistence.xml:
<property name="toplink.target-server" value="br.org.acnsf.util.JBossTransactionController"/>
Valeu
GOSTEI 0