无法使类路径正确

时间:2009-02-22 04:37:23

标签: java jar classpath

我正在尝试编译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类的定义。

2 个答案:

答案 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”

运行您的程序
  • 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文件会执行您想要的操作(请注意,最后必须有一个空行或不起作用):

Main-Class: WizardGame
Class-Path: slick.jar lwjgl.jar ibxm.jar

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

相关问题