0

我正在尝试编译这个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精灵游戏

但是我收到未定义 jar 类的错误,这意味着当我设置类路径时一定有问题。我不确定我做错了什么。

我也试过

javac -classpath .;.\slick.jar.;.\lwjgl.jar;.\ibxm.jar

无论哪种方式,如果 .jar 文件与源代码位于同一目录中,jvm 不应该自行查找它们吗?就我而言,我已经在 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 类的定义。

4

2 回答 2

5

您还必须将-classpath选项添加到java命令。不仅对编译器。

喜欢:

javac -classpath .;lib\myjar.jar MyClass.java 

接着

java -classpath .;lib\myjar.jar MyClass

否则解释器 ( java ) 将不知道在哪里可以找到所需的类。

于 2009-02-22T04:40:05.687 回答
4

Oscar 大获成功 - 您也需要 java 命令上的 -classpath。

您可以查看的另一件事(对于您现在正在做的事情来说有点过分了,但您仍然应该为了体验而这样做)是创建一个 JAR 文件。在 JAR 文件中,您可以提供一个 manifest.mf 文件,该文件告诉 java 命令在哪里可以找到其他 JAR 文件以及主类是什么。

然后,您将通过“java -jar foo.jar”运行您的程序

  • http://java.sun.com/docs/books/tutorial/deployment/jar/manifestindex.html
  • http://java.sun.com/docs/books/tutorial/deployment/jar/appman.html
  • http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html

我相信下面的 manifest.m 文件会做你想做的事(注意你必须在最后有一个空行,否则它将不起作用):

主类:WizardGame
类路径:slick.jar lwjgl.jar ibxm.jar

这假定所有 JAR 文件(foo.jar 和其他三个)都在同一个目录中。

于 2009-02-22T04:48:03.060 回答