javaでopenglプログラムが実行できません
お世話になります。
javaでopenglのプログラムを実行すべくjava.netのJOGLプロジェクトのページから以下をダウンロードしました。
jogl-1.1.1a-windows-i586.zip
jogl-demos.zip
jogl-demos-src.zip
参考サイトの指示に従って、jogl.jarを含む全ての*.jarを[JDK_HOME]\jre\lib\extにコピーし、gluegen-rt.dll,jogl.dll,jogl_awt.dll,jogl_cg.dllを[JDK_HOME]\jre\binにコピーしてインストールしましたが
以下のようにデモプログラムを実行すると以下のエラーが出て実行できません。
どこが悪いのでしょうか?よろしくお願いします。
F:\java\opengl\jogl-demos>java -cp jogl-demos.jar demos.gears.Gears
Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/opengl/GLEventListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javax.media.opengl.GLEventListener
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 12 more
Could not find the main class: demos.gears.Gears. Program will exit.
参考サイト
http://itpro.nikkeibp.co.jp/article/COLUMN/20060710/242865/?ST=develop
お礼
salsberryさん こんにちは、わざわざ再現確認までありがとうございます。 まず、ClassLoaderに依存しないコードに変えるべきということですが、クラスローダーを使っているのは、Eclipse projects(http://www.eclipse.org/eclipselink/)のクラス部分なので、出来れば原因をつきとめてソース修正は回避したいと考えています。 PersistenceUnitProcessorクラスのfindPersistenceArchivesメソッドにて、クラスローダーのgetResourcesが使われていて、実行環境の相対パスから設定ファイルを取得したいみたいなのですが public static Set<Archive> findPersistenceArchives(ClassLoader loader, String descriptorPath){ Archive archive = null; Set<Archive> archives = new HashSet<Archive>(); Enumeration<URL> resources = loader.getResources(descriptorPath); while (resources.hasMoreElements()){ URL descUrl = resources.nextElement(); URL puRootUrl = computePURootURL(descUrl, descriptorPath); ・ ・ } sun.misc.Launcher$AppClassLoaderだと、descriptorPathに対して descriptorPath -> "META-INF/persistence.xml" ↓ descUrl -> "//opt/Import/build/classes/META-INF/persistence.xml" puRootUrl -> "file://opt/Import/build/classes/" ちゃんとローカルの設定ファイルを見つけれるのですが java.net.URLClassLoaderだと descriptorPath -> "META-INF/persistence.xml" ↓ descUrl -> "META-INF/persistence.xml" puRootUrl -> "uri:/" みたいな感じで、ファイルを見つけることができません。 再現寛容にて、試行錯誤してみましたがやっぱりダメです。来週にもうひとつLinux環境があるのでそちらでも試した見たいと思います。 タイムアップで、意向とは異なりますがソース修正も考えないといけないかもです。