Fout: er is een JNI-fout opgetreden, controleer uw installatie en probeer het opnieuw – tijdens het uitvoeren van het Java-programma vanaf de Ubuntu-terminal

Ik probeer een eenvoudig client-serverprogramma uit te voeren dat in Java is geschreven via de Ubuntu-terminal. Ik kon de code helaas met succes compileren, ik kan de code niet uitvoeren.

Serverklassecode:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server 
{
        public static void main(String[] args)
        {
                try 
                {
                        //create server Socket with demo port
                        ServerSocket server = new ServerSocket(20);
                        //wait for server connection
                        Socket s = server.accept();
                        //upon establishing connection, print 
                       // successful message
                        System.out.println("connection eastablished");
                } 
                catch (IOException e) 
                {
                        e.printStackTrace();
                }
        }
}

Klantklassecode:

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client 
{
        public static void main(String[] args)
        {
                try 
                {
                        //create client socket
                        Socket client = new Socket("127.0.0.1", 20);
                        //upon establishing connection, print                            
                        //successful message
                        System.out.println("connection eastablished");
                } 
                catch (UnknownHostException e) 
                {
                        e.printStackTrace();
                } 
                catch (IOException e) 
                {
                        e.printStackTrace();
                }
        }
}

Tijdens het uitvoeren van de gehelede klas, krijg ik de volgende fout:

MAMUN @ MAMUN: ~ $ JAVA-testfout: er is een JNI-fout opgetreden, controleer alstublieft
Uw installatie en probeer het opnieuw uitzondering in thread “main”
java.lang.unsupportedclassversionError: test is gecompileerd door een
Meer recente versie van de Java Runtime (Class File versie 55.0),
Deze versie van de Java Runtime herkent alleen de varianten van klassenbestand
tot 52.0 op Java.lang.classLoader.defineclass1 (inheemse methode) bij
java.lang.classLoader.defineclass (ClassLoader.java:763) bij
java.security.secureclassLoader.defineclass (SecureClassLoader.java:142)
bij Java.net.urlclassLoader.defineclass (URLCLASSLOLTER.JAVA:467) bij
java.net.urlclassloader.access $ 100 (urlclassloader.java:73) bij
java.net.urlclassloader $ 1.Run (URLCLASSLOLTER.JAVA:368) bij
java.net.urlclassloader $ 1.Run (URLCLASSLOLTER.JAVA:362) bij
java.security.accesscontroller.doprivileged (native methode) bij
java.net.urlclassloader.findclass (URLCLASSLOLTER.JAVA:361) bij
java.lang.classLoader.loaderclass (ClassLoader.java:424) bij
Sun.Misc.launcher $ APPCLASSLOLTER.LOADCLASS (Launcher.java:349) bij
java.lang.classloader.loadclass (ClassLoader.java:357) bij
Sun.launcher.launcherhelper.checkandLoadmain (Launcherhelper.java:495)

Ik heb geprobeerd om stapelflow en andere forum en blogs te zoeken om een ​​oplossing te vinden, ik heb soortgelijke vragen gevonden, geprobeerd de antwoorden aan die vraag, maar kon een oplossing voor mijn probleem vinden. Daarom voeg ik deze vraag hier toe.

Later heb ik geprobeerd een heel eenvoudig Java-programma te schrijven, bijvoorbeeld om een begroeting af te drukken. Dit programma kan ook worden gecompileerd, maar zou niet dezelfde fout produceren.
Ik heb geprobeerd het programma vanuit verschillende mappen uit te voeren, behalve vanuit de hoofdmap. Maar alle inspanningen leveren hetzelfde resultaat op.

public class Test
{
        public static void main(String[] args)
                {
                        System.out.println("Hello...");
                }
}

Ik kan perfect werken in Eclipse waar mijn java versie 8, probleem alleen optreedt bij het werken in terminal.

In mijn Ubuntu is jdk-versie 11 (die zonder mijn medeweten automatisch is bijgewerkt);
Mijn Ubuntu-versie: 18.04.1 LTS


Antwoord 1, autoriteit 100%

De fout zegt alles:

Uitzondering in thread “main” java.lang.UnsupportedClassVersionError:
Test is samengesteld door een recentere versie van Java Runtime
(klassebestand versie 55.0)…

Je hebt gecompileerd voor Java 11 … maar je gebruikt een oudere JRE (Java 8).

SUGGESTIES:

  • opnieuw compileren met -sourceen -targetom een eerdere versie van Java in uw .class-bestand te targeten, of

  • Upgrade uw doel-JRE naar Java 11

VOORBEELD: javac -target 8 -source 8 MyClass.java

Ter info, dit zijn de Java-versies in de header van elk Java-klassebestand:

https://en.wikipedia.org/wiki/Java_class_file

  • Java SE 11 = 55 (0x37 hex)
  • Java SE 10 = 54 (0x36 hex)
  • Java SE 9 = 53 (0x35 hex)
  • Java SE 8 = 52 (0x34 hex)
  • Java SE 7 = 51 (0x33 hex)
  • JAVA SE 6.0 = 50 (0x32 hex)
  • JAVA SE 5.0 = 49 (0x31 HEX)
  • JDK 1.4 = 48 (0x30 HEX)
  • JDK 1.3 = 47 (0x2F HEX)
  • JDK 1.2 = 46 (0x2E HEX)
  • JDK 1.1 = 45 (0x2D HEX)

ook fyi, hier zijn de opdrachtregelopties voor Javac:

Java SE 11 & GT; Gereedschap & GT; javac

PS:

U hebt mogelijk meerdere onafhankelijke versies van Java geïnstalleerd op hetzelfde moment. Gebruik de alternatieven opdracht:


Antwoord 2

Ik heb ook dit probleem gehad. Dit is mijn oplossing.
Er was 2 Java-versies geïnstalleerd (Java 8 en Java SE Development Kit 13).
Deze fout treedt op vanwege deze 2 versies. Verwijder gewoon de oude versie en je bent klaar.
(* Java Compile .java-bestand met SE Development Kit en proberen het uitvoeren van oude versie uit te voeren. Er zijn dus compatibele fouten voor.)

Controleer vervolgens Java-versies op CMD met javac -versionen java -version. Na de installatie moeten zowel versiescodes hetzelfde zijn.

Other episodes