Problemas para "Executar" .jar com 2 cliques,mas no prompt do Windows7 funciona

Olá galera ,sou BEM novato em java(comecei a ver POO há menos de um mês) e também é meu primeiro post aqui no GUJ.
Dei uma pesquisada rápida e não encontrei solução pro meu problema.

Por enquanto estou usando somente notepad++ e compilando pelo prompt no Windows 7 para não ficar mal acostumado com IDE logo de cara.
Criei meu manifest.txt declarando a classe que tem o método main e o inseri no meu diretório de classes.Criei o .jar com o comando jar -cmf manifest.txt Myapp.jar harryson(harryson é o nome do pacote/diretório onde se encontram minhas classes compiladas).
Funcionou numa boa,executo meu programa através do comando java -jar Myapp.jar e funciona normalmente.
Porém,ao dar 2 cliques no .jar ele dá o erro:“Could not find the main class: mypackage.Myclass.Program will exit”.
Eu sei que o .jar não é como um arquivo executável,mas como ele está associado a máquina virtual java,então 2 cliques nele teria que fazer ele abrir a JVM e executar meu código,não é?Eu já vi programa em java sendo executado dessa forma e no próprio fórum vi que isso é possível.

Resumindo,minha dúvida é essa:Como fazer o .jar executar com 2 cliques?Até pq o usuário final não vai executar meu código pelo prompt,não é?

[quote=harrysongui]Olá galera ,sou BEM novato em java(comecei a ver POO há menos de um mês) e também é meu primeiro post aqui no GUJ.
Dei uma pesquisada rápida e não encontrei solução pro meu problema.

Por enquanto estou usando somente notepad++ e compilando pelo prompt no Windows 7 para não ficar mal acostumado com IDE logo de cara.
Criei meu manifest.txt declarando a classe que tem o método main e o inseri no meu diretório de classes.Criei o .jar com o comando jar -cmf manifest.txt Myapp.jar harryson(harryson é o nome do pacote/diretório onde se encontram minhas classes compiladas).
Funcionou numa boa,executo meu programa através do comando java -jar Myapp.jar e funciona normalmente.
Porém,ao dar 2 cliques no .jar ele dá o erro:“Could not find the main class: mypackage.Myclass.Program will exit”.
Eu sei que o .jar não é como um arquivo executável,mas como ele está associado a máquina virtual java,então 2 cliques nele teria que fazer ele abrir a JVM e executar meu código,não é?Eu já vi programa em java sendo executado dessa forma e no próprio fórum vi que isso é possível.

Resumindo,minha dúvida é essa:Como fazer o .jar executar com 2 cliques?Até pq o usuário final não vai executar meu código pelo prompt,não é?
[/quote]

Olá,

Cara, deixa eu te perguntar só pra desencargo de consciência, você já configurou as variáveis de ambiente corretamente?

Verifica se ela está assim:

Vá no Painel de Controle do Windows, abra o ícone Sistema, clique em Configurações avançadas do sistema em seguida no botão “Variáveis de ambiente”.

Você pode tanto configurar essas variáveis somente para o usuário que está logado ou todo o sistema, se for usuário, clique em variáveis de usuário no botão “Nova”, se for em todo o sistema em “Nova” de variáveis de sistema.

Defina o nome da variável como “JAVA_HOME”
Defina o valor da variável como “C:\jdk1.6.0_01” (nesse campo, coloca o endereço da pasta onde você instalou o JDK)

Clique em ok e pronto.

Agora faça o mesmo para as variáveis PATH e CLASSPATH definindo os seguintes valores respectivamente:

para PATH: %JAVA_HOME%\bin;
para CLASSPATH: C:\jdk1.6.01\lib;

Agora se estiver configurado correto, e se “java- jar” funciona é sinal que o manifest está correto, talvez um erro na instalação do JRE ou JDK, aí nesse caso, você tem 2 opções, desinstalar e instalar novamente ou tentar os seguintes comandos :

C:\>ftype Myapp.jar="C:\JRE1.6\bin\javaw.exe" -jar "%1" %*  //Lembrando que o endereço do javaw tem que ser o mesmo que está instalado o JDK
C:\>assoc .jar=Myapp.jar

Espero ter ajudado;

Daniel…

1 curtida

Cara.
Vc tem que setar a classe principal da sua aplicação no manifest!
Main-Class: principal.Principal
Ai é só vc substituir principal.Principal pelo nome totalmente qualificado
da sua classe,ou seja,o caminho de pacote em pacote até a sua classe principal

Desculpe.Não li que vc ja tinha setado a classe principal.
Cara.O erro diz que o programa nao consegue encontrar a classe principal.
Verifica se o nome da classe está mesmo correto ou se vc tem o método main dentro dela!

Obrigado Daniel e dariogondim ,mas não é esse o problema.As variáveis estão corretamente configuradas,até pq eu já compilei e executei umas 200+ classes e nunca tive problema.O problema é só com o .jar mesmo.
E o nome da classe está mesmo correto no manifest e contém o método main nessa classe,pq pelo prompt ele executa normalmente.

Testei hoje no mac e tb só está funcionando pelo terminal

[quote=harrysongui]Obrigado Daniel e dariogondim ,mas não é esse o problema.As variáveis estão corretamente configuradas,até pq eu já compilei e executei umas 200+ classes e nunca tive problema.O problema é só com o .jar mesmo.
E o nome da classe está mesmo correto no manifest e contém o método main nessa classe,pq pelo prompt ele executa normalmente.

[/quote]

Amigo verifica a versao da maquina virtual que voce esta rodando esse teu codigo. No prompt digite java -version. Se for a 1.5 realmente ela só vai rodar pelo prompt. Somente a partir da versao 1.6 é possivel executar o jar diretamente com 2 cliques.

Caso nao seja possivel colocar a versao 1.6 na sua maquina uma opcao seria simplesmente criar um .bat para executar o jar.

ps: verifique tambem a versao do compilador que voce utilizou para gerar o jar. com javac -version

Té.

Amigo,
No Mac,tanto o java quanto o javac é o 1.6
No Windows, 1.7 pro javac e pro java

Pelo jeito vou ter que criar o .bat mesmo.Obrigado.

MUITO obrigado,Carlos.Depois de ter postado as versões do Java aqui,me passou pela cabeça que poderia ser um erro na versão do java da minha máquina.Como no mac está a 1.6 e eu estava usando o Windows com a 1.7 pra “compilar” e gerar o .jar,me passou pela cabeça usar o mac que está com a versão 1.6.E não é que o problema está mesmo na versão 1.7,pois compilando e gerando o .jar pela versão 1.6 tudo funcionou lindamente.Então problema parcialmente resolvido,pois assim eu não posso usar o Windows pra compilar e gerar o .jar,o que é um saco pq eu prefiro Windows.Será que retiraram esse "funcionalidade"da versão 1.7?

Uma outra causa desse problema pode ser o JRE para x64 (64 bits) instalado no PC junto com o JRE para x86 (32 bits).
Aqui tive problemas com um aplicativo que conectava com banco de dados Syabase SQL Anywhere.
Mesmo com as variaveis de ambiente setadas (JAVA_HOME, PATH e CLASSPATH), a classe que conecta ao banco dava erro e o programa fechava.
Depois de meses de tentativas e erros desinstalei o JRE para x64 e o para x86, e reinstalei apenas o JRE x86. Foi quando resolvi o problema.

1 curtida