не могу получить правильный путь к классам - PullRequest
0 голосов
/ 22 февраля 2009

Я пытаюсь скомпилировать этот пример 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, если они находятся в том же каталоге, что и исходный код? в моем случае я установил 3 банки в том же каталоге, что и WizardGame.java. если я попробую компилировать без аргументов -classpath, это не сработает.

редактирование: я сделал так, как было сказано, но теперь он говорит мне: «нет lwjgl в java.library.path»

Я проверил свой lwjgl.jar с помощью winrar и увидел, что он содержит две папки: meta-inf и org, а затем внутри org есть lwjgl. это должно быть так? потому что, если это так, я не знаю, что не так.

изменить 2: создал манифест с тем, что вы сказали, затем использовал:

jar cfm test.jar manifest.txt

это создало файл jar, затем я использовал

java -jar test.jar

и затем мне сказали, что не нашел определения для класса WizardGame.

Ответы [ 2 ]

5 голосов
/ 22 февраля 2009

Вы также должны добавить опцию -classpath к команде java . Не только компилятору.

нравится:

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

, а затем

java -classpath .;lib\myjar.jar MyClass

В противном случае интерпретатор (Java) не будет знать, где найти необходимые классы.

4 голосов
/ 22 февраля 2009

Оскар включен - вам нужен также -classpath для команды java.

Еще одна вещь, на которую вы можете посмотреть (это слишком из-за того, что вы делаете сейчас, но вы все равно должны делать это для опыта), это создать файл 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 и остальные три) находятся в одном каталоге.

...