无法找到正确的 JVM 选项

Unable to find the right JVM options

好吧,首先,我是 Java 的新手,但不是编程新手。 对于个人项目,我决定使用 Slick2D,这是 java 中的一个图形库,但我 运行 遇到了一个我现在无法解决的问题。

考虑以下因素:

据我了解,slick2d 使用 lwgjl。我已按照以下页面上的说明进行操作: Setting up Slick2D for netbeans

我认为我的问题是为我的 JVM 提供正确的选项。 目前我设置的是:

-Djava.library.path=/home/karel/Téléchargements/slick/native/unix

这是我得到的当前错误输出:

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.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.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)

我的代码如下(好吧,需要库的部分,但不起作用 - 都是教程 material,顺便说一句。我自己没有做的):

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;
    }  
}

堆栈上有一些答案可以帮助您解决此问题,因为从错误中可以清楚地看出它是由 LWJGL64 的链接错误引起的。一个post有多个解决方案here提供了多个解决方案,虽然针对eclipseIDE具体适用通用解决方案:

引用自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.

解决错误的其他潜在示例: Setting up natives

错误告诉您缺少名为 'lwjgl64' 的文件。您收到一个 UnsatisfiedLinkError,根据 Java 文档,它是:

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

现在,您是单独使用 Slick2D 吗?或者你有 LWJGL 和 Slick2D? Slick2D 不是独立的;你需要 LWJGL 才能 运行 它。我建议从 their site, 获取 LWJGL 并将其本机文件夹添加到类路径。

从 Slick2D 文档中,他们这样写:

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

Source

好吧,这有点尴尬,但我明白我的问题是什么,这是对我给出的 link 的简单误解(关于如何在 netbeans 上安装和使用 slick2D 的说明):

事实上,我的问题是,由于 lwgjl.jar 和 slick2D 文件夹中的其他类似文件,我认为 lwgjl 最终包含在 slick 文件夹中。

因此,对于最后一步,我为我的 JVM 提供了一个路径,将其指向 slick library 文件夹,而这次它要求 lwgjl 文件,导致了上面显示的错误。

我将该路径更改为 lwgjl/native/linux 文件夹,现在一切正常。 感谢您的回答,他们帮助很大。