.class para .exe SEM JVM?

11 respostas
maior_abandonado

alguem ai sabe como fazer isso???sei que ja tem alguns topicos aqui no guj que falam disso, mais não achei uma solução em nenhum, (eu consegui gerar executaveis, mais eles só tão funcionano em maquinas “com” uma jvm instalada, e eu quero conseguir fazer o exe funcionar em pcs sem ela) caso tenha algum que mostre programas que o fazem sem a JVM, por favor me aponte um link. tentei usar esses programas até então

Launch4J

criando o executavel com o launch4J, só consegui arquivos que, em maquinas sem a JVM me dão essas mensagens de erro e assim não iniciando.

this application was configured to use a bundled Java Runtime Environment nut the runtime missing or corrupted

(eu intendi o que ta dizendo ai, ao criar o executavel, o programa exige que ou vc passe o caminho de um jre, que foi o que eu fiz, ou diga a versão minima de jre que pode executar o arquivo se eu não tiver enganado (meu ingles é pessimo), eu troquei na opção e o erro mudou pro proximo)

could not find the main class. program will exit

(me certifiquei em estar apontando a classe correta com o main, dentro do jar também apontado e testado, ao dar o duplo clique nele ele abre normal, esta funcionando, não sei o que possa ser)

o programa não permite avançar se nenhuma das duas opções esteja marcada, a da jre minima ou o caminho da jre.

EXE4J

tentando com o exe4J, não consegui me livrar desses erros:

java.lang.ClassNotFoundException: backup.Janela

at java.net.URLClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)

at com.exe4j.runtime.WinLauncher.main(Unknown Source)

ou
java.lang.UnsupportedClassVersionError: Bad version number in .class file

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(Unknown Source)

at java.security.SecureClassLoader.defineClass(Unknown Source)

at java.net.URLClassLoader.defineClass(Unknown Source)

at java.net.URLClassLoader.access$100(Unknown Source)

at java.net.URLClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)

at com.exe4j.runtime.WinLauncher.main(Unknown Source)

de acordo com as escolhas que tentava coloca no programa, ou dava um erro ou outro

Janex]|[Builder

ia tenta também usar o Janex]|[Builder 1.0 (http://baixaki.ig.com.br/download/Janex-Builder.htm) mais a propria descrição do programa diz que tem que ter uma JVM configurada:

“Janex]|[Builder dá aos programadores em Java a possibilidade de criarem arquivos EXE. O aplicativo pode ser iniciado se a Java Virtual Machine possuir o caminho correto no diretório do Windows.”

Java Launcher

ia tenta o Java Launcher 3.201 (http://baixaki.ig.com.br/download/Java-Launcher.htm), mais o link de download dessa pagina ta quebrado, ao procurar o site do programa, encontrei esse topico, http://www.guj.com.br/posts/list/50077.java que diz que o executavel chama a JVM (e meu interesse é conseguir executar esses arquivos em maquinas sem JVM)… alem de não achar o site do programa (o link deixado nesse topico tb nao abre)

depois eu tentei usar o exeJ 1.01 (http://www.download.com/3120-20_4-0.html?tg=dl-20&qt=exeJ%201.01&tag=srch)… bom, pro executavel gerado por ele funciona, vc tem que deixar o class que vc usou no mesmo diretorio que ele, fora que ele também não funciono em pc que não tenha JVM (mesmo erro de não foi encontrada a classe main)

otimo…rs

Pagos

dai eu encontrei o Excelsior JET 5.0, que é pago… (240 dolares…q legal)axo até que eu vo testa depois, porém eu to procurando uma solução free

achei tb o JavaNativeCompiler (http://javacompiler.mtsystems.ch/index.html), e uma parte do site falando do preço la embaixo… texto depois assim como o anterior.

ouvi em muitos lugares que o JBuilder faz isso, em uns lugares que só a versão paga dele faz isso… alguem ai que usa essa IDE poderia me confirmar se esta correto isso?

alguem ai consegue gerar .exe que não depende de JVM instalada no pc poderia me ajudar??? ou que saiba fazer isso mesmo com os progrmas que eu tentei???

11 Respostas

maior_abandonado

JSmooth

descobri esse software mais ele tb tem o mesmo problema…não encontra a classe com o metodo main.

esse ai mostro um outro erro, quando ao pedir pra ele carrega junto JNI, da um erro do windows, daqueles que pergunta se vc deseja envia o relatorio de erro pra microsoft…

ninguem ai não conhece algum que da pra executa o arquivo.exe sem a JVM???

KWill

Se não me engano, tem um carinha chamado Mohan que mantém builds do GCJ para windows, com o nome de thisiscool-gcj:

http://www.thisiscool.com/gcc_mingw.htm

O JavaNativeCompiler não é totalmente pago pelo que sei, até a versão 0.8 dá para usar sem problemas de mensagem de demonstração. Os problemas dessa versão 0.8 são em relação ao suporte e AWT e Swing.

Deve ajudar em alguma coisa.

Inté.

maior_abandonado

ow…vlw a resposta kra…

deve ser por isso então… eu usei o jnc, fiz tudo certinho ao que eu imagino e ele me gerou um arquivo com o nome assim: .jar.o (o windows diz que é um “arquivo .o”…)

eu vo testa esse programa ai que vc falou, o mohan…

kra…eu ja tava adicionando o java.io, javax.swing, java.awt, tudo ao meu jar…iria fica enorme, fora o fato que certas classes das que eu usei fazem herança pra outras de fora desses pacotes… bom…eu vo tenta o mohan e testa num pc daki sem jvm e depois posto aqui o que consegui…

obrigadão denovo…

T

Para quem diz que vai mudar para .NET porque o Visual Studio gera .EXE para programas C# / J# / VB.NET / JScript.NET / etc:

  • O .EXE que o Visual Studio gera requer o .NET Framework instalado. Ele é “mais ou menos” como se fosse um executável gerado pelo Exe4J.

  • Se você tentar copiar esse .EXE para uma versão velha do Windows que já não tenha o .NET Framework instalado, você vai ter de instalar o .NET Framework de qualquer jeito.
    Ou então você é novidadeiro e usou o Visual Studio 2008 para gerar um programa que requer o .NET Framework 3.5 para rodar; vai ter de instalar a nova versão do .NET Framework. Ela só virá com o Vista SP 1 ou com o Windows Server 2008.

Ou seja, .EXE do Java sem JVM é mais ou menos a mesma coisa de .EXE do .NET sem .NET Framework - não rola muito bem. Você acaba tendo de mandar um instalador de JVM ou .NET Framework junto com sua aplicação.

É melhor, na verdade, não encanar muito com isso.

maior_abandonado

???

mais nenhum deles embute parte da jre dentro do programa, o suficiente pra executa-lo, bibliotecas que ele usa mais a parte responsavel por traduzir o que essa classe usou???

simplesmente não tem como???

T

Se o seu requisito é realmente não precisar mandar a JVM junto com seu programa, as únicas alternativas que conheço são o ExcelsiorJET (no caso do Windows) e o gcj (no caso do Linux). Acho que ninguém conseguiu isso que você quer (mandar só o que você precisa da JRE no seu executável).

maior_abandonado

bom…isso, ou transforma em codigo nativo…tanto faz…desde que seja possivel executa-lo sem JVM, pra fica mais viavel em maquinas mais antigas, com pouca memoria…

T

Máquinas mais antigas, com pouca memória?
Reciclagem nelas!

(Obs - Delphi também serve).

S

O ExcelsiorJET serve para Linux também.
O GCJ eu nunca consegui fazer funcionar.

KWill

Achei um link aqui entre os favoritos do meu pc antigo:

http://www.cs.umanitoba.ca/~eclipse/6-Compiling.pdf

É um pequeno tutorial ensinando sobre o uso do GCJ com SWT. Para mim serviu para alguma coisa na época.

Inté.

louds

maior_abandonado:
???

mais nenhum deles embute parte da jre dentro do programa, o suficiente pra executa-lo, bibliotecas que ele usa mais a parte responsavel por traduzir o que essa classe usou???

simplesmente não tem como???

Não é possivel fazer isso legalmente. A licensa de distribuição da JRE impede que ela seja distribuida de forma parcial. Isso inclui a ExcelsiorJET, que foi processada pela Sun por conta disso, por sinal.

É legalmente impossivel* distruibuir um programa que precisa da JRE da Sun sem incluir ela inteira.

Com GCJ você consegue ir bem longe, só não esquece de ver o tamanho das libs exigidas pelo runtime gnu. A última vez que eu tentei um hello world ficou com mais de 6 megas se linkar elas estaticamente.

*na real basta pagar o tanto de $ que a Sun exigir, claro.

Criado 7 de dezembro de 2007
Ultima resposta 11 de dez. de 2007
Respostas 11
Participantes 5