Por que converter CLASS para EXE?
O bytecode da JVM é um conjunto de instruções independente de plataforma interpretado em tempo de execução pela Java Virtual Machine. Um .exe do Windows contém código de máquina nativo x86/x64 executado diretamente pela CPU. Estes são formatos fundamentalmente diferentes, sem nenhum conjunto de instruções compartilhado, tornando a tradução mecânica para um executável nativo impossível.
Como converter CLASS para EXE
jpackage (JDK 14+) FREE
Primeiro agrupe seus arquivos .class em um JAR com jar cfe app.jar MainClass *.class, depois execute jpackage --input . --main-jar app.jar --name MyApp --type exe para criar um instalador do Windows que agrupa um JRE privado.
Launch4j FREE
Agrupe suas classes em um JAR primeiro e, em seguida, use o Launch4j para envolver o JAR em um stub .exe leve que localiza um JRE instalado em tempo de execução.
Sobre estes formatos
Um arquivo CLASS é um bytecode Java compilado - o resultado que o javac produz a partir de um arquivo fonte .java. Para executá-lo, você precisa do Java (um JDK) instalado e usar o comando…
Abrir detalhes de .CLASS →Um arquivo EXE é um programa executável do Windows. No Windows, clique duas vezes para executá-lo. No Mac ou Linux, use o CrossOver ou Wine - os EXEs não rodam nativamente fora do Windows.…
Abrir detalhes de .EXE →Qualidade e o que observar
- Em todas as abordagens práticas, o Java ainda roda por baixo - o
jpackageagrupa um JRE privado, o Launch4j exige que um esteja instalado; a JVM não é opcional para o bytecode Java. - Sites que afirmam converter arquivos
.classarbitrários em um.exegenuíno e autônomo são enganosos; tal ferramenta não existe. - Para inspecionar ou recuperar o código-fonte de um
.class, use JD-GUI ou CFR para descompilar de volta para.java.
Perguntas frequentes
Posso renomear um arquivo .class para .exe e executá-lo?
.class começa com os magic bytes do Java CA FE BA BE, não um cabeçalho PE válido.O que o jpackage realmente produz?
Posso envolver um único arquivo .class sem um projeto completo?
public static void main; classes de biblioteca e fragmentos precisam de todas as dependências agrupadas em um JAR primeiro.