【问题标题】:can't get the classpath right无法正确设置类路径
【发布时间】:2009-02-22 04:37:23
【问题描述】:

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

但是我得到了没有定义 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 类的定义。

【问题讨论】:

    标签: java jar classpath


    【解决方案1】:

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

    喜欢:

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

    然后

    java -classpath .;lib\myjar.jar MyClass
    

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

    【讨论】:

      【解决方案2】:

      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 和其他三个)都在同一个目录中。

      【讨论】:

      • 可能是“高级主题”,但从一开始就值得学习
      • 对于实际分布,这是更好的答案。
      猜你喜欢
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多