好吧,首先,我是Java的新手,但不是编程。 对于一个个人项目,我决定使用Slick2D,这是一个java中的图形库,我遇到了一个我现在无法解决的问题。
考虑以下因素:
根据我的理解,slick2d使用lwgjl。我已按照以下页面上的说明操作: Setting up Slick2D for netbeans
我认为我的问题是给我的JVM正确的选择。 目前我设置的是:
-Djava.library.path = /家庭/卡雷尔/Téléchargements/光滑的/天然的/ 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;
}
}
答案 0 :(得分:2)
错误告诉您缺少名为“lwjgl64”的文件。根据Java文档,您将获得UnsatisfiedLinkError:
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>
答案 1 :(得分:1)
堆栈上有一些答案可以帮助您解决此问题,因为从错误中可以清楚地看出它是由LWJGL64的链接错误引起的。一篇包含许多解决方案的帖子here提供了许多解决方案,但针对eclipse IDE特别适用于一般解决方案:
引用here @Ben Jackson
LWJGL需要特定平台的本机组件 在java.library.path中。它们位于子目录中 LWJGL分发并以Linux,OSX和Solaris以及.dll结尾.so 对于Windows。
解决错误的其他可能示例: Setting up natives
答案 2 :(得分:0)
好吧,这有点令人尴尬,但我理解我的问题是什么,这是对我给出的链接的简单误解(关于如何在netbeans上安装和使用slick2D的说明):
事实上,我的问题是,由于slick2D文件夹中的lwgjl.jar和其他类似文件,我认为lwgjl最终包含在光滑的文件夹中。
因此,在最后一步中,我给了我的JVM一条路径,指向光滑的库文件夹,而这次,它要求lwgjl文件,导致上面显示的错误。
我将该路径更改为lwgjl / native / linux文件夹,现在一切正常。 感谢您的回答,他们帮助很大。