4

LWJGL を使用する非常に基本的なプログラムをコンパイルして実行しようとしています。

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;

public class HelloWorld {
     public static void main (String args[]) {
         try {
             Display.setTitle("Hello World");
             Display.create();
         } catch (LWJGLException e) {
             e.printStackTrace();
         }

         while (!Display.isCloseRequested()) {
             try {
                 Thread.sleep(100);
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
    }
}

私はそれを使用してコンパイルすることができました:

javac -classpath ~/Downloads/lwjgl-2.8.3/jar/lwjgl.jar:~/Downloads/lwjgl-2.8.3/jar/lwjgl_util.jar:~/Downloads/lwjgl-2.8.3/jar/jinput.jar HelloWorld.java

しかし、今は実行できません...試しました:

java HelloWorld

と:

java -Djava.library.path=~/Downloads/lwjgl-2.8.3/native/linux HelloWorld

しかし、それらのどれも機能しません。両方とも、LWJGLException クラス定義が見つからないと不平を言っています。

Linux を実行していますが、Eclipse や Netbeans などの IDE は使用していません。使いたくないので、ターミナルから実行できるようにしたいです。

4

3 に答える 3

6

以下は私の Windows マシンで動作しますが、Linux のフォーマット (コロンとセミコロン) に合わせてシェル コマンドを調整しました。

ディレクトリ構造を次のように設定します。

/HelloWorld.java
/lib/jwjgl.jar
/lib/jinput.jar
/lib/jwjgl_util.jar
/native/linux/... (all your native files)

コンパイル:

シェルから、HelloWorld.java を含む親ディレクトリに移動し、次のように入力します。

javac -cp .:lib/* HelloWorld.java

-cpプログラムをコンパイルするための .java ファイルと .class ファイルが .(現在のディレクトリ) と のjar下の任意のファイルの両方にあることを指定しますlib/.jarファイル-cp .:lib/lwjgl.jar:lib/jinput.jarなどを手動で指定できることに注意してください*

走る:

親ディレクトリから次のコマンドを実行します。

java -cp .:lib/* -Djava.library.path=native/linux HelloWorld

ここでも、-cpコンパイル済み.classファイルが現在のディレクトリとその/libディレクトリの下の任意の jar 内にあることを指定します。-Djava.library.path=ネイティブ ファイルが見つかる場所を指定します。/の前に行頭を付けていないことに注意してくださいnative。先頭の を省略することにより、ディレクトリが現在の作業ディレクトリに相対的なサブディレクトリである/ことを java に伝えます。native誤って を含めると/、native が絶対ディレクトリとして扱われます。

現在の作業ディレクトリの外にあるネイティブ ファイルの場所を指定しても問題ありません。これを行うには、絶対的な場所を指定する必要があります。たとえば、Windows では次のようになります。

-Djava.library.path=C:\jwjgl-2.8.4\native\windows

これだけで、IDE やビルド スクリプトを使わずに起動して実行することができます。

ファイナルノート

書かれているように、のHelloWorld.java動作は不十分です (画面がロックアップし、プロセスを強制終了する必要があります)。次のコードHelloWorld.java. 楽しみ!

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.input.Keyboard;

public class HelloWorld{
    public void start() {
        try {
            Display.setDisplayMode(new DisplayMode(640, 480));
            Display.create();
        } catch (LWJGLException e) {
            e.printStackTrace();
            System.exit(0);
        }

        // Init OpenGL
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(-3.2, 3.2, -2.4, 2.4, -1, 1);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);

        boolean quit = false;

        while (!quit) {         
            // Clear the screen.
            GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);

            // Begin drawing
            GL11.glBegin(GL11.GL_TRIANGLES);

                // Top & Red
                GL11.glColor3f(1.0f, 0.0f, 0.0f);
                GL11.glVertex2f(0.0f, 1.0f);

                // Right & Green
                GL11.glColor3f(0.0f, 1.0f, 0.0f);
                GL11.glVertex2f(1.0f, 1.0f);

                // Left & Blue
                GL11.glColor3f(0.0f, 0.0f, 1.0f);
                GL11.glVertex2f(1.0f, -1.0f);

            GL11.glEnd();

            Display.update();

            if (Display.isCloseRequested() || Keyboard.isKeyDown(Keyboard.KEY_ESCAPE))
                quit = true;
        }

        Display.destroy();
    }

    public static void main(String args[]) {
        HelloWorld application = new HelloWorld();
        application.start();
    }

}
于 2012-09-08T18:55:15.357 に答える
0

javac コマンドで complie.sh を作成し、クラスパスに必要なものをすべて .jar に設定し、コンパイルする必要のあるすべてのクラスを追加してみてください。これにより、出力ディレクトリに 1 つ以上の .class ファイルが作成されます。その時点で、「プロジェクト」をコンパイルしたことがわかります。

この後、Java で起動できますが、Java での起動には 2 つのモードがあります。

java -jar yourJarName.jar

このためには、すべてのクラスを jar ファイルに jar し、必要な他のすべての jar を maifest ファイルに追加するか、必要なすべての jar を抽出してクラスを jar に埋め込む必要があります。

もう1つはあなたが試したもののようなものです

java -classpath your1.jar your2.jar claaspath com 内のクラスのトゥーン。yourpackage.MainClass

正確な手順については、「コマンド ライン Linux で Java プロジェクトをコンパイルする」および「コマンド ライン Linux から Java アプリケーションを実行する」を検索してください。

于 2012-09-08T16:40:39.980 に答える
0

クラスパスに .jar がありません。で追加できますが-classpath、Linux では余分な記号に注意してください。おそらく、起動時にも必要になるでしょう。

java -classpath ~/Downloads/lwjgl-2.8.3/jar/lwjgl.jar:~/Do... -Djava.library.path=~/Downloads/lwjgl-2.8.3/native/linux HelloWorld

記号がよくわからないので、 ~絶対パスを入れてみてください。

于 2012-09-08T16:25:36.747 に答える