2016-11-17 4 views
0

In erster Linie bin ich neu in Java, aber nicht in der Programmierung. Für ein persönliches Projekt entschied ich, dass ich Slick2D, eine Grafikbibliothek in Java, verwenden sollte, und ich stoße auf ein Problem, das ich nicht beheben konnte.Die richtigen JVM-Optionen können nicht gefunden werden

Unter Berücksichtigung der folgenden:

  • Ich benutze Netbeans
  • Ich bin zur Zeit auf Linux

Von dem, was ich verstehe, verwendet slick2d lwgjl. Ich habe die Anweisungen auf der folgenden Seite befolgt: Setting up Slick2D for netbeans

Mein Problem, denke ich, gibt meiner JVM die richtigen Optionen. Zeit die, die ich gesetzt sind:

-Djava.library.path =/home/karel/Téléchargements/Slick/native/Unix

Hier wird der aktuelle Fehlerausgang I erhalten:

run: 
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl64  in java.library.path 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) 
at java.lang.Runtime.loadLibrary0(Runtime.java:870) 
at java.lang.System.loadLibrary(System.java:1122) 
at org.lwjgl.Sys$1.run(Sys.java:72) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66) 
at org.lwjgl.Sys.loadLibrary(Sys.java:87) 
at org.lwjgl.Sys.<clinit>(Sys.java:117) 
at org.lwjgl.opengl.Display.<clinit>(Display.java:135) 
at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36) 
at jcoinche.client.JcoincheClient.main(JcoincheClient.java:29) 
/home/karel/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 

Mein Code ist wie folgt (na ja, der Teil, der eine Bibliothek benötigt und funktioniert nicht - es ist alles Tutorial Material, übrigens Nichts, was ich mir selbst gemacht.):

package jcoinche.client; 

import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.io.InputStreamReader; 
import java.io.BufferedReader; 
import java.util.Scanner; 
import static jcoinche.client.Game.gamename; 
import static jcoinche.client.Game.xSize; 
import static jcoinche.client.Game.ySize; 
import org.newdawn.slick.AppGameContainer; 
import org.newdawn.slick.SlickException; 

public class JcoincheClient 
{ 
public static void main(String[] args) 
{ 
    Socket socket; 

    AppGameContainer appgc; 
    try 
    { 
     appgc = new AppGameContainer(new Game(gamename)); 
     appgc.setDisplayMode(xSize, ySize, false); 
     appgc.setTargetFrameRate(60); 
     appgc.start(); 
    } 
catch(SlickException e) 
{ 
    e.printStackTrace(); 
} 
} 

Game.java:

package jcoinche.client; 

import org.newdawn.slick.*; 
import org.newdawn.slick.state.*; 

public class Game extends StateBasedGame 
{ 

    public static final String gamename = "MyGameName"; 
    public static final int play = 0; 
    public static final int xSize = 400; 
    public static final int ySize = 300; 

    public Game(String gamename){ 
     super(gamename); 
     this.addState(new Play()); 
    } 

    public void initStatesList(GameContainer gc) throws SlickException{ 
     this.getState(play).init(gc, this); 
     this.enterState(play); 
    } 

} 

Play.java:

package jcoinche.client; 

import org.newdawn.slick.GameContainer; 
import org.newdawn.slick.Graphics; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.state.BasicGameState; 
import org.newdawn.slick.state.StateBasedGame; 

public class Play extends BasicGameState 
{ 
    public Play() 
     { 

    } 

    public void init(GameContainer gc, StateBasedGame sbg) 
     throws SlickException 
     { 

    } 

    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) 
      throws SlickException 
     { 

    } 

    public void update(GameContainer gc, StateBasedGame sbg, int delta) 
      throws SlickException 
     { 

    } 

    public int getID() 
     { 
     return 0; 
    } 
} 

Antwort

2

Der Fehler weist Sie auf das Fehlen einer Datei mit dem Namen 'lwjgl64' hin. Sie erhalten eine UnsatisfiedLinkError, die entsprechend der Java-Dokumentation ist:

Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native. 

Nun verwenden Sie Slick2D allein? Oder hast du LWJGL und Slick2D? Slick2D ist nicht Standalone; Sie benötigen LWJGL, um es auszuführen. Ich empfehle, LWJGL von their site, zu bekommen und seinen nativen Ordner dem Klassenpfad hinzuzufügen.

Aus der Slick2D docs, schreiben sie dies:

-Djava.library.path=<lwjgl-X.X path>/native/<linux|macosx|solaris|windows> 

Source

+1

Wenn Sie Slick herunterladen, haben Sie tatsächlich ein paar lwgjl.jar-Dateien drin ... Aber ich glaube, ich beginne das Problem zu verstehen. Ich werde ein paar Tests machen und zurückkommen. – Tohkai

1

ein paar Antworten auf Stapel Es gibt die von Ihnen zu lösen dieses Problem, da es klar aus dem Fehler ist, dass es kann dazu beitragen, verursacht wird, ein Verbindungsfehler zu LWJGL64. Ein Beitrag mit einer Reihe von Lösungen here eine Reihe von Lösungen bietet, obwohl an der Eclipse IDE die speziell die allgemeine Lösung gilt:

Zitat aus here @ Ben Jackson

LWJGL needs the native components for your particular platform to be in java.library.path. These are in the subdirectory native in the LWJGL distribution and end in .so on Linux, OSX and Solaris and .dll for windows.

Andere mögliche Beispiele, um die Fehler zu lösen : Setting up natives

0

Okay, das ist ein bisschen peinlich, aber ich verstand, was mein Problem war, und es war ein einfaches Missverständnis der Verbindung I gab (Anweisungen zur Installation und Verwendung von slick2D auf Netbeans):

In der Tat, mein Problem war, dass, wegen der lwgjl.jar und andere ähnliche Dateien in der slick2D-Ordner, ich dachte, lwgjl war, am Ende, im Slick enthalten f älter.

Als letzten Schritt gab ich meiner JVM einen Pfad, der sie in den Slick-Bibliotheksordner leitete, während sie diesmal nach lwgjl-Dateien fragte, was die oben gezeigten Fehler verursachte.

Ich habe diesen Pfad in den Ordner lwgjl/native/linux geändert, und alles funktioniert jetzt einwandfrei. Danke für deine Antworten, sie haben sehr geholfen.

Verwandte Themen