O programa não roda

Boa tarde!

Acabei de finalmente finalizar meu programa… Quando vou instalar em outra máquina, ele não abre.
Alguém sabe como ajudar?

Dá o seguinte erro:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread “main” java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.jdesktop.layout.GroupLayout$Group
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)
… 7 more

Já atualizei o java da máquina, o JDK, e nada… Sendo que no meu PC funciona normalmente
Não sei o que pode ser.

Obrigado!

Poxa, legal!
Mas como que faço? Achei o arquivo, swing-layout-1.0.4.jar, e agora?
Executo ele na outra máquina? Coloco dentro da pasta do programa? Não sei o que fazer
Obrigado!

Você tem que incluir esse .jar no classpath da sua aplicação.
Como é que você está instalando ela no cliente?

Eu já adicionei, porém continua com o mesmo erro.
E sei lá viu como que estou instalando kkkk, eu só compilo ele e rodo o arquivo .jar
Não sei muito a teoria, apenas os códigos kkkk

É uma boa hora pra estudar.
Não vai aprender na tentativa e erro. :wink:

Beleza… Mas preciso de uma direção né, pois não faço a mínima ideia de onde seja este erro…
Já tentei adicionar no classpath mas não funcionou, não sei mais o que fazer. Estou pesquisando na net há horas e tentando fazer isso funcionar.
Fiquei meses programando fazendo um programa zika dms, mesmo eu não tendo feito um curso na vida. Sou empresário, não programador, mas fiz um programa como hobby só que acabou virando profissional, preciso dele na minha empresa.
Não consigo instalá-lo no PC da minha empresa… Só no meu PC…
Se pudesse parar com a ignorância de “tem q estudar pra saber” e simplesmente me ajudasse a solucionar o problema, eu agradeceria muito!
Valeu.

Quando acontece NoClassDefFoundError é porque a classe em questão não foi localizada pelo classloader, em geral acontece quando faltam bibliotecas de terceiros no classpath da aplicação.

Como você fez isso?

Você não sabe como está instalando?

Se você não nos mostrar o que fez e como fez para tentar rodar a aplicação, fica difícil te orientar.

A máquina do cliente ao menos tem uma máquina virtual Java instalada?
Ou você mesmo está distribuindo uma cópia da VM com sua aplicação?

Não fui ignorante, te dei uma dica valiosa.
Quando perguntei como está fazendo para instalar a aplicação na máquina do cliente você me disse que não sabia como está fazendo.

1 curtida

Puts, então, pensei a mesma coisa quando vi o erro, porém eu adicionei todas os jars no classpath da aplicação, mas mesmo assim não vai.

Eu apenas fui lá com o botão direito na biblioteca do meu projeto e cliquei em adicionar jar.
No caso estou utilizando estas dependencias http://prntscr.com/oyrk8z

Desculpe, mas como eu tinha dito, eu não sei muito da teoria. Para mim era simplesmente programar o código e rodar o programa, não tive aulas me explicando toda teoria por trás. Eu sei que é essencial saber o básico pelo menos, só que tô sem tempo para estudar, quando eu puder, tiver mais tempo livre vou fazer uns cursos ou faculdade.
Mas voltando ao assunto que interessa…
Eu cliquei lá no botão de “Limpar e construir o projeto”, construiu com o seguinte código

ant -f “C:\Users\rafae\Documents\O Famoso” -Dnb.internal.action.name=rebuild clean jar
init:
deps-clean:
Updating property file: C:\Users\rafae\Documents\O Famoso\build\built-clean.properties
Deleting directory C:\Users\rafae\Documents\O Famoso\build
clean:
init:
deps-jar:
Created dir: C:\Users\rafae\Documents\O Famoso\build
Updating property file: C:\Users\rafae\Documents\O Famoso\build\built-jar.properties
Created dir: C:\Users\rafae\Documents\O Famoso\build\classes
Created dir: C:\Users\rafae\Documents\O Famoso\build\empty
Created dir: C:\Users\rafae\Documents\O Famoso\build\generated-sources\ap-source-output
Compiling 58 source files to C:\Users\rafae\Documents\O Famoso\build\classes
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: C:\Users\rafae\Documents\O Famoso\src\o\famoso\gerenciadores\gerUsuarios.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Copying 1 file to C:\Users\rafae\Documents\O Famoso\build\classes
compile:
Created dir: C:\Users\rafae\Documents\O Famoso\dist
Copying 1 file to C:\Users\rafae\Documents\O Famoso\build
Copy libraries to C:\Users\rafae\Documents\O Famoso\dist\lib.
Building jar: C:\Users\rafae\Documents\O Famoso\dist\O_Famoso.jar
To run this application from the command line without Ant, try:
java -jar “C:\Users\rafae\Documents\O Famoso\dist\O_Famoso.jar”
Updating jar: C:\Users\rafae\Documents\O Famoso\dist\O_Famoso.jar
jar:
CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)

Logo após eu apenas executo esse JAR na máquina da minha empresa.
Se eu executar só dá o erro do “A JNI error…”, e se eu executar pelo CMD dá o erro completo, que eu postei acima.
Outra coisa: Eu adicionei o código abaixo no arquivo build.xml, que tem na pasta do projeto

{target name="-post-jar"> {jar update=“true” destfile="${dist.jar}"> {zipfileset src="${libs.swing-layout.classpath}"/> {/jar> {/target>
(tive q substituir o ‘<’ por ‘{’ aqui, pois não está dando para mostrar)

Após eu colocar isto no build.xml, o erro mudou para este

Exception in thread “main” java.lang.NoClassDefFoundError: org/simpleyaml/configuration/file/YamlFile
at o.famoso.arquivos.gerArq.carregarArquivo(gerArq.java:20)
at o.famoso.main.Main.carregar(Main.java:44)
at o.famoso.visual.principal.OFamoso.main(OFamoso.java:176)
Caused by: java.lang.ClassNotFoundException: org.simpleyaml.configuration.file.YamlFile
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 3 more

Pelo que entendo dele, não conseguiu achar a classe da minha dependência, porém ela já tá como dependência, isso q não estou entendendo. No meu PC funciona perfeitamente

Sei que foi uma dica valiosa, só que da maneira que falou, pareceu “Foda-se vc e estuda aí”
Sei que você não tem obrigação alguma de me ajudar, mas só de estar respondendo isso já sei que quer ajudar, e eu agradeço por isto

@UP
Não sei se pode dar UP nesse fórum porém tô precisando muito

Tem isso nas OBS da dependência, Simple-YAML

This API uses the next two dependences, which are already included in Simple-YAML-1.3.jar,
so you don’t have to worry about anything more than put the jar as dependency on your project.

Pra evitar isso, tens que usar o botão de texto pré-formatado, identificado pelo botão </>.
Você cola seu código no fórum, seleciona ele e daí clica no </>.
Aí os < serão renderizados direito, veja:

<target name="-post-jar">
    <jar update="true" destfile="${dist.jar}">
        <zipfileset src="${libs.swing-layout.classpath}"/>
    </jar>
</target>

Sim, mas a sua máquina é uma máquina de desenvolvimento, você tem o Maven instalado e provavelmente você está executando seu código a partir da IDE.

Provavelmente quando você copia os JARs pra máquina cliente, estão faltando os JARs das dependências.

Pra isso precisamos primeiro ver que estruturas de pastas e arquivos o seu build está gerando.
Depois que você termina o build, quais arquivos foram gerados na pasta target?

Poderias postar o conteúdo do arquivo MANIFEST-MF que está dentro do arquivo que corresponde à sua propriedade ${dist.jar}?

Opa, maravilha, obrigado pela dica! Sou novo neste fórum, e faz tempo que não frequento outros fóruns, então perdi o jeitinho de criar posts legais kkk

Eu nunca criei um projeto em Maven, apenas o “comum”, simplesmente aplicação java.
E, na minha máquina, eu executo ele pela IDE, e, pela aquela JAR que saiu após compilar.

Puts, então… É exatamente isto que estou tentando ver. Hoje já tirei todas as dependências do meu projeto, e coloquei somente as “necessárias”. Deixei apenas o Simple-YAML (Que agora não sei pq não está mais importando, a dependência tá lá mas não consigo importar mais os métodos dela), o JCalendar e o swing-layout.

É que agora estou tendo aquele probleminha que eu disse acima de não conseguir importar, então não estou mais conseguindo compilar o programa sem erros, mas, quando estava dando certo, aparecia todas dependências do projeto, todas que eu coloquei em .jar. Eu conferi, tinham todas mesmo. Tem no print do meu comentário anterior, o conteúdo. Vou tentar resolver esse problema para poder compilar o programa de novo e aí eu atualizo aqui, te mando certinho.

Acredito que só tenha isto

Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

Ou

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.7
Created-By: 1.8.0_211-b12 (Oracle Corporation)
Class-Path: lib/beansbinding-1.2.1.jar lib/swing-layout-1.0.4.jar lib/
eclipselink.jar lib/javax.persistence_2.1.0.v201304241213.jar lib/org
.eclipse.persistence.jpa.jpql_2.5.2.v20140319-9ad6abd.jar lib/mysql-c
onnector-java-5.1.23-bin.jar lib/jcalendar-1.4.jar lib/javaee-api-6.0
.jar lib/barcode.jar lib/AbsoluteLayout.jar lib/Simple-YAML-1.3.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: o.famoso.visual.principal.OFamoso

Viu só?
Todas seus JARs de terceiros estão na pasta lib.

Então quando você copiar o seu JAR gerado, tens que copiar junto essa pasta lib com os JARs de terceiros.

No seu cliente vais ter uma estrutura mais ou menos assim:

<a pasta do seu programa>
|
+----> <o jar do seu programa>.jar
|
+----> lib
       |
       +----> beansbinding-1.2.1.jar
       |
       +----> swing-layout-1.0.4.jar
       |
       +----> eclipselink.jar
       |
       +----> javax.persistence_2.1.0.v201304241213.jar
       |
       +----> org.eclipse.persistence.jpa.jpql_2.5.2.v20140319-9ad6abd.jar
       |
       +----> mysql-connector-java-5.1.23-bin.jar
       |
       +----> jcalendar-1.4.jar
       |
       +----> javaee-api-6.0.jar
       |
       +----> barcode.jar
       |
       +----> AbsoluteLayout.jar
       |
       +----> Simple-YAML-1.3.jar
1 curtida

Puts, era só isso mesmo :man_facepalming:

Não fazia a mínima ideia que precisava copiar a pasta, sempre pensei que as dependências eram copiadas DENTRO da JAR, e não fora.

Mas isso aí, que fique como um toque a mim e todos os outros que não sabem disso, rs

Obrigado por toda ajuda que você me deu no tópico!

Tenha um ótimo dia.

Depende como é configurado seu build, nada impede de gerar um “fat JAR” contendo tudo.