Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法获得正确的类路径_Java_Jar_Classpath - Fatal编程技术网

Java 无法获得正确的类路径

Java 无法获得正确的类路径,java,jar,classpath,Java,Jar,Classpath,我试着先编译一个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

我试着先编译一个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\滑头,罐子\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-jartest.jar

然后它告诉我它没有找到类WizardGame的定义。

您还必须在java命令中添加-classpath选项。不仅仅是编译器

比如:

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

java -classpath .;lib\myjar.jar MyClass

否则,java解释器将不知道在哪里找到所需的类

Oscar非常棒——您也需要在java命令上使用-classpath

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

然后通过java-jarfoo.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和其他三个文件都在同一个目录中。

可能是高级主题,但值得学习,因为对于实际分发,这是更好的答案。