【问题标题】:Unable to find the right JVM options找不到正确的 JVM 选项
【发布时间】:2016-11-17 12:32:36
【问题描述】:

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

考虑以下几点:

  • 我使用 Netbeans
  • 我目前在 linux 上

据我了解,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$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)

我的代码如下(嗯,需要一个库的部分,并且不起作用 - 顺便说一句,这都是教程材料。我自己没有做任何事情):

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

【问题讨论】:

    标签: java linux netbeans slick2d


    【解决方案1】:

    错误告诉您缺少名为“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

    【讨论】:

    • 当你下载 slick 时,你实际上得到了一些 lwgjl.jar 文件......但我想我开始理解这个问题了。我要做一些测试然后回来。
    【解决方案2】:

    堆栈上有一些答案可以帮助您解决此问题,因为从错误中可以清楚地看出它是由与 LWJGL64 的链接错误引起的。一篇包含多种解决方案的帖子here 提供了多种解决方案,尽管专门针对 eclipse IDE,但通用解决方案适用:

    引用here@Ben Jackson

    LWJGL 需要为您的特定平台提供本地组件 在 java.library.path 中。这些在子目录 native 中 LWJGL 发行版,在 Linux、OSX 和 Solaris 上以 .so 和 .dll 结尾 窗户。

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

    【讨论】:

      【解决方案3】:

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

      其实我的问题是,因为slick2D文件夹中的lwgjl.jar和其他类似文件,我以为lwgjl最终被包含在slick文件夹中。

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

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

      【讨论】:

        猜你喜欢
        • 2020-06-23
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多