problema com programa para desktop:
depois que faço meu arquivo jar, tenho 2 opções para executa-lo:
dando 2 cliques no jar
ou em linha de comando fazer “java -jar nomejar.jar”
Só que esse jar possiu um mkdir que quando é executado em linha de comando, cria a pasta na mesma pasta do jar.
Já quando dou dois cliques no jar, ele cria na pasta raiz.
Por que isso? Como faço para que em abos os modos a pasta seja criada na mesma pasta do meu jar?
O comando assoc indica qual é a associação entre a extensão jar e o tipo (“MIME Type”) usado pelo Windows para iniciar um programa.
O comando ftype indica, dada uma associação (neste caso o nome é “jarfile”), qual é o comando usado pelo Windows para iniciar um programa a partir de de um arquivo com extensão .jar.
private String getJarFolder() {
// get name and path
String name = getClass().getName().replace('.', '/');
name = getClass().getResource("/" + name + ".class").toString();
// remove junk
name = name.substring(0, name.indexOf(".jar"));
name = name.substring(name.lastIndexOf(':')-1, name.lastIndexOf('/')+1).replace('%', ' ');
// remove escape characters
String s = "";
for (int k=0; k<name.length(); k++) {
s += name.charAt(k);
if (name.charAt(k) == ' ') k += 2;
}
return s;
}
Assim vc pega o caminho completo do jar, pode ser que te ajude.
[quote=Luizao]Eu uso o seguinte método nesses casos:
private String getJarFolder() {
// get name and path
String name = getClass().getName().replace('.', '/');
name = getClass().getResource("/" + name + ".class").toString();
// remove junk
name = name.substring(0, name.indexOf(".jar"));
name = name.substring(name.lastIndexOf(':')-1, name.lastIndexOf('/')+1).replace('%', ' ');
// remove escape characters
String s = "";
for (int k=0; k<name.length(); k++) {
s += name.charAt(k);
if (name.charAt(k) == ' ') k += 2;
}
return s;
}
Assim vc pega o caminho completo do jar, pode ser que te ajude.[/quote]
Lembrei como fazia.
Para o programa funcionar eu colocava o Main do programa fora do pacote e criava um bat para executar o jar.
OBS: Alguem sabe dizer porque não é recomendável colocar classes (meu Main por exemplo) fora do pacote?
Uma idéia que tive para evitar que o usuário chame diretamente o jar, é implementar com esse seu código a busca pelas pastas que quero. Se ela não existir, lanço uma mensagem para o usuario informando que o arquivo de execução é o bat.
Pessoal, muitissimo obrigado à todos pelas respostas.
A menos que a classe seja o ponto de entrada do programa (no seu caso o Main), eu não recomendo deixar outras classes fora do pacote.
É que você não consegue importar direito essas classes em alguns ambientes (como por exemplo, dentro de um JSP).
A menos que a classe seja o ponto de entrada do programa (no seu caso o Main), eu não recomendo deixar outras classes fora do pacote.
É que você não consegue importar direito essas classes em alguns ambientes (como por exemplo, dentro de um JSP). [/quote]
Então quanto ao ambiente desktop fico tranquilo. Obrigado pela resposta.