質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Q&A

解決済

1回答

1769閲覧

クラスパスを設定してJOGLで動くように書かれたプログラムを実行したいです。

mizumizuki

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

0グッド

0クリップ

投稿2019/06/04 06:42

前提・実現したいこと

今回初めて質問するプログラミング初心者です。
#####クラスパスを設定してJOGLで動くように書かれたプログラムを実行したいです。
ネットで調べた通りにプログラムを動かそうとしたものの
クラスパスの設定方法が分からずプログラムが動かせません。

発生している問題・エラーメッセージ

クラスパスが設定されていないためかパッケージが見つからないとされてしまい, うまく動きませんでした。 以下エラー文です。 CubePosition.java:7: エラー: シンボルを見つけられません public class CubePosition extends GLCanvas implements GLEventListener{ ^ シンボル: クラス GLCanvas CubePosition.java:7: エラー: シンボルを見つけられません public class CubePosition extends GLCanvas implements GLEventListener{ ^ シンボル: クラス GLEventListener CubePosition.java:15: エラー: シンボルを見つけられません protected Gl2 gl; ^ シンボル: クラス Gl2 場所: クラス CubePosition CubePosition.java:16: エラー: シンボルを見つけられません protected GLU glu; ^ シンボル: クラス GLU 場所: クラス CubePosition CubePosition.java:45: エラー: シンボルを見つけられません public void init(GlAutoDrawable drawable){ ^ シンボル: クラス GlAutoDrawable 場所: クラス CubePosition CubePosition.java:53: エラー: シンボルを見つけられません public void reshape(GlAutoDrawable drawable, ^ シンボル: クラス GlAutoDrawable 場所: クラス CubePosition CubePosition.java:68: エラー: シンボルを見つけられません public void display(GlAutoDrawable drawable){ ^ シンボル: クラス GlAutoDrawable 場所: クラス CubePosition CubePosition.java:95: エラー: シンボルを見つけられません public void dispose(GlAutoDrawable drawable){ ^ シンボル: クラス GlAutoDrawable 場所: クラス CubePosition CubePosition.java:3: エラー: パッケージcom.jogamp.openglは存在しません import com.jogamp.opengl.*; ^ CubePosition.java:4: エラー: パッケージcom.jogamp.opengl.gluは存在しません import com.jogamp.opengl.glu.*; ^ CubePosition.java:5: エラー: パッケージcom.jogamp.opengl.awtは存在しません import com.jogamp.opengl.awt.*; ^ CubePosition.java:21: エラー: シンボルを見つけられません setSize(500,500); ^ シンボル: メソッド setSize(int,int) 場所: クラス CubePosition CubePosition.java:22: エラー: シンボルを見つけられません addGLEventListener(this); ^ シンボル: メソッド addGLEventListener(CubePosition) 場所: クラス CubePosition CubePosition.java:25: エラー: addに適切なメソッドが見つかりません(CubePosition) f.add(this); ^ メソッド Component.add(PopupMenu)は使用できません (引数の不一致: CubePositionをPopupMenuに変換できません:) メソッド Container.add(Component)は使用できません (引数の不一致: CubePositionをComponentに変換できません:) CubePosition.java:47: エラー: シンボルを見つけられません glu=new GLU(); ^ シンボル: クラス GLU 場所: クラス CubePosition CubePosition.java:49: エラー: シンボルを見つけられません gl.glEnable(Gl2.GL_DEPTH_TEST); ^ シンボル: 変数 Gl2 場所: クラス CubePosition CubePosition.java:50: エラー: シンボルを見つけられません gl.glEnable(GL2.GL_CULL_FACE); ^ シンボル: 変数 GL2 場所: クラス CubePosition CubePosition.java:59: エラー: シンボルを見つけられません gl.glMatrixMode(GL2.GL_PROJECTION); ^ シンボル: 変数 GL2 場所: クラス CubePosition CubePosition.java:63: エラー: シンボルを見つけられません gl.glMatrixMode(GL2.GL_MODELVIEW); ^ シンボル: 変数 GL2 場所: クラス CubePosition CubePosition.java:69: エラー: シンボルを見つけられません gl.glClear(GL2.GL_COLOR_BUFFER_BIT|Gl2.Gl_Depth_BUFFER_BIT); ^ シンボル: 変数 GL2 場所: クラス CubePosition CubePosition.java:69: エラー: シンボルを見つけられません gl.glClear(GL2.GL_COLOR_BUFFER_BIT|Gl2.Gl_Depth_BUFFER_BIT); ^ シンボル: 変数 Gl2 場所: クラス CubePosition CubePosition.java:85: エラー: シンボルを見つけられません gl.flBigin(GL2.GL_QUADS); ^ シンボル: 変数 GL2 場所: クラス CubePosition

該当のソースコード

Java

1import java.awt.*; 2import java.awt.event.*; 3import com.jogamp.opengl.*; 4import com.jogamp.opengl.glu.*; 5import com.jogamp.opengl.awt.*; 6 7public class CubePosition extends GLCanvas implements GLEventListener{ 8 public static void main(String[] args){ 9 if(args.length ==3) 10 (new CubePosition("CubePosition",args)).showFrame(); 11 else 12 (new CubePosition("CubePosition")).showFrame(); 13 } 14 private Frame f; 15 protected Gl2 gl; 16 protected GLU glu; 17 protected double eye_x=4.0,eye_y=3.0,eye_z=7.0; 18 19 protected CubePosition(String name){ 20 super(); 21 setSize(500,500); 22 addGLEventListener(this); 23 24 f=new Frame(name); 25 f.add(this); 26 f.pack(); 27 f.addWindowListener(new WindowAdapter(){ 28 public void windowClosing(WindowEvent e){ 29 System.exit(0); 30 } 31 }); 32 } 33 34 protected CubePosition(String name,String[] args){ 35 this(name); 36 eye_x=Double.parseDouble(args[0]); 37 eye_y=Double.parseDouble(args[1]); 38 eye_z=Double.parseDouble(args[2]); 39 } 40 41 protected void showFrame(){ 42 f.setVisible(true); 43 } 44 45 public void init(GlAutoDrawable drawable){ 46 gl=drawable.getGL().getGL2(); 47 glu=new GLU(); 48 gl.glClearColor(0.0f,0.0f,0.0f,1.0f); 49 gl.glEnable(Gl2.GL_DEPTH_TEST); 50 gl.glEnable(GL2.GL_CULL_FACE); 51 } 52 53 public void reshape(GlAutoDrawable drawable, 54 int x,int y, int w, int h){ 55 final double fieldOfView=25.0,near=1.0,far = 20.0; 56 double aspect=(double)w/(double)h; 57 58 gl.glViewport(0,0,w,h); 59 gl.glMatrixMode(GL2.GL_PROJECTION); 60 gl.glLoadIdentity(); 61 glu.gluPerspective(fieldOfView,aspect,near,far); 62 63 gl.glMatrixMode(GL2.GL_MODELVIEW); 64 gl.glLoadIdentity(); 65 glu.gluLookAt(eye_x,eye_y,eye_z,0.0,0.0,0.0,0.0,1.0,0.0); 66 } 67 68 public void display(GlAutoDrawable drawable){ 69 gl.glClear(GL2.GL_COLOR_BUFFER_BIT|Gl2.Gl_Depth_BUFFER_BIT); 70 cubeDisplay(); 71 } 72 73 static float[][] vertics= 74 {{-1.0f,-1.0f,-1.0f},{1.0f,-1.0f,-1.0f},{1.0f,1.0f,-1.0f}, 75 {-1.0f,1.0f,-1.0f},{-1.0f,-1.0f,1.0f},{1.0f,-1.0f,1.0f}, 76 {1.0f,1.0f,1.0f},{-1.0f,1.0f,1.0f}}; 77 78 static int[][] faces= 79 {{1,2,6,5},{2,3,7,6},{4,5,6,7},{0,4,7,3},{0,1,5,4},{0,3,2,1}}; 80 static float[][] colors= 81 {{0.0f,1.0f,1.0f},{1.0f,0.0f,1.0f},{1.0f,1.0f,0.0f}, 82 {0.0f,0.5f,0.5f},{0.5f,0.0f,0.5f},{0.5f,0.5f,0.0f}}; 83 84 protected void cubeDisplay(){ 85 gl.flBigin(GL2.GL_QUADS); 86 for(int i=0;i<faces.length;i++){ 87 gl.glColor3fv(colors[i],0); 88 for(int j=0;j<faces[i].length;j++) 89 gl.glVertex3fv(vertics[faces[i][j]],0); 90 } 91 gl.glEnd(); 92 gl.glFlush(); 93 } 94 95 public void dispose(GlAutoDrawable drawable){ 96 97 } 98}

試したこと

export CLASSPATH=~/user/
のようにするとクラスパスを設定できるということだったのでターミナルで入力したのですが、動きませんでした。

補足情報(FW/ツールのバージョンなど)

JavaはJDK12
JoGLは現在ダウンロードできる最新版を利用しています。
JOGLのサイトから7zファイルをダウンロードし、中身を開くところまでは良かったのですが、現在はこの時点で止まってしまっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2019/06/04 10:00 編集

joglのバージョンを明記した方がよいと思います。今maven central repositoryからDLすると2.3.2が落とせましたが質問者さんのバージョンはこれですか? --- 失礼しました。質問文をよく読んでみると、上にコメントしたこと以前の問題であると気づきました。外部jarを利用したコンパイルの仕方自体がわからないということですよね。
mizumizuki

2019/06/04 13:43

仰る通り外部jarを利用したコンパイル方法がわかりません。 お教えいただけると助かります。 JoGLのバージョン自体は2.3.2です
guest

回答1

0

ベストアンサー

完全な解決方法をアドバイスできる知識がないので、いくつか気になる点のみコメントします。

(1) プロジェクトにはこのソースファイルしかないのか
module-info.javaがあるのかどうかわかりませんが、Java12を使うならどちらにせよモジュールに関する知識なしにコンパイルはできないです。とりあえずご質問のコードをコンパイルするためにmodule-info.javaを作ると仮定するとその内容は最低限以下のようになると思います。

java

1//module-info.java 2module your.favolite.module.name { 3// ^^^^^^^^^^^^^^^^^^^^^^^^^ ここは好きなモジュール名にする 4 requires java.desktop; 5 requires jogl.all; 6}

(2) CubePositionクラスのパッケージがデフォルトパッケージだが?
Java12を使うならデフォルトパッケージはご法度と考えた方がよいと思います。
CubePositionは適当なパッケージに置くことをお勧めします。

(3) IDEを導入することをお勧めします。
javac/javaによるビルド・実行は煩雑なのでIDEを使ってビルド・実行した方がよいと思います(ご質問にどのIDEを使っているか書いてないのであえてこのアドバイスをしています)。IntelliJ IDEA/Eclipse/NetBeansなど真っ当なIDEがよいと思います。IDEを使う場合、ライブラリーの追加手順や実行時のオプションの指定方法は微妙に違います。まずはIDEの使い方に慣れましょう。特にjoglはネイティブライブラリーを使うので外部jarだけのものに比べ難易度は若干高めになると思います。

(4) 少なくとも最新のjoglではコンパイルエラーが多数でるソースです
誤:Gl2
正:GL2
誤:GlAutoDrawable
正:GLAutoDrawable
こうした綴りの違いが多いです。typoなのかjoglのバージョンによる仕様の違いなのか自分にはわかりませんでした。

(5) このソースをコンパイルしても期待どおり動きませんでした。
(4)を手直しした上で実行してみたのですが、実行時例外が発生してウィンドウが出るところまで到達しませんでした。例外が発生している部分はjoglのバグに見えました。

java

1// WindowsAWTWGLGraphicsConfigurationFactory.java 2... 3170 if( 0 > gcIdx ) { 4171 chosenGC = configs[gcIdx];

gcIdxが負のときそれを配列のインデックスに指定してます!実際自分の環境ではgcIdxが負になったため171行目で実行時例外がおきて先に進みませんでした。

このバグがいったい何なのか自分にはわかりませんでしたが、ネットに転がってるjoglの別のサンプルコードを動かすと上記の問題は起きなかったので、質問者さんのコードは「通常は起きないjoglの秘孔を突くソースコード」なのかも知れません。


ちなみに自分はIntelliJ IDEAを使いmaven central repositoryから
(A) gluegen-rt-main:2.3.2
(B) jogl-all-main:2.3.2
をプロジェクトへ取り込み、コンパイルしました。

実行するには前述のjarのみでは不足のようだったので結局

(C) http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z

からネイティブライブラリー(windows-amd64/*.dll)を入手しました。(質問者さんは多分このアーカイブをDLしておられるのでしょう)

申し訳ないですがjoglのドキュメントをチラ見した程度ではどのjarを使うべきかはっきりわかりませんでした。自分は(A),(B)でコンパイルし、実行の際に(C)にあるdllだけしかるべき場所をコピーして動かしたのですが、それ以上つっこんでは調べませんでした。このあたり全然自信がないのでコメントは詳しい方にお譲りします。

投稿2019/06/04 18:23

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問