我正在尝试编译this slick2d示例(第一个),但我无法让它工作。这是代码:
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
/**
* @author panos
*/
public class WizardGame extends BasicGame
{
public WizardGame()
{
super("Wizard game");
}
public static void main(String[] arguments)
{
try
{
AppGameContainer app = new AppGameContainer(new WizardGame());
app.setDisplayMode(500, 400, false);
app.start();
}
catch (SlickException e)
{
e.printStackTrace();
}
}
@Override
public void init(GameContainer container) throws SlickException
{
}
@Override
public void update(GameContainer container, int delta) throws SlickException
{
}
public void render(GameContainer container, Graphics g) throws SlickException
{
}
}
我按照说明将lwjgl.jar,slick.jar和ibxm.jar放在目录中。然后我试了一下:
javac -classpath .; 完整路径 \ slick.jar .; 完整路径 \ lwjgl.jar; 完整路径 \ ibxm.jar
然后
java WizardGame
但是我得到的错误是没有定义jar类,这意味着当我设置类路径时必定会出错。我不确定我做错了什么。
我也试过
javac -classpath。;。\ slick.jar。;。\ lwjgl.jar;。\ ibxm.jar
无论哪种方式,如果jvm与源代码位于同一目录下,它们不应该自己查找.jar文件吗?在我的例子中,我在与WizardGame.java相同的目录中设置了3个jar。如果我尝试编译没有-classpath参数,它不起作用。
编辑: 我按照指示做了,但现在它告诉我“java.library.path中没有lwjgl”
我用winrar检查了我的lwjgl.jar,看到它包含两个文件夹:meta-inf和org,然后在org里面有lwjgl。这应该是那样的吗?因为如果是的话,我不知道什么是错的。
编辑2: 用你所说的创建了清单,然后使用:
jar cfm test.jar manifest.txt
这创建了一个jar文件,然后我用了
java -jar test.jar
然后它告诉我它没有找到WizardGame类的定义。
答案 0 :(得分:5)
您还必须将 -classpath 选项添加到 java 命令中。不仅是编译器。
喜欢:
javac -classpath .;lib\myjar.jar MyClass.java
然后
java -classpath .;lib\myjar.jar MyClass
否则解释器(java)将不知道在哪里找到所需的类。
答案 1 :(得分:4)
奥斯卡砰然一声 - 你也需要java命令上的-classpath。
你可以看到的另一件事(你现在正在做的事情有点过分,但你仍然应该为体验做)是创建一个JAR文件。在JAR文件中,您可以提供manifest.mf文件,该文件告诉java命令在哪里可以找到其他JAR文件以及主类是什么。
然后您将通过“java -jar foo.jar”
运行您的程序我相信以下manifest.m文件会执行您想要的操作(请注意,最后必须有一个空行或不起作用):
Main-Class: WizardGame Class-Path: slick.jar lwjgl.jar ibxm.jar
假设所有JAR文件(foo.jar和其他三个)都在同一目录中。