포럼: Open Discussion (Thread #19873)

テスト (2008-09-09 17:37 by ksaito0717 #38767)

テスト投稿です。

RE: テスト (2010-02-05 10:27 by hide13579 #48352)

//------------------------------------------------------------------------------
import javax.swing.*;
import java.awt.*;
import jp.sourceforge.acerola3d.a3.*;

public class Test2 extends JFrame{
Test2(String title){
super(title);
setBounds(0 , 0 , 400 , 300);
}

public static void main(String args[]) {
Test2 dodai = new Test2("Kitty on your lap");

Container contentPane = dodai.getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new Button("Kitty on your lap"));

dodai.setVisible(true);
dodai.setDefaultCloseOperation(3);

JWindow a3canvas_window = new JWindow();
a3canvas_window.setSize(500,500);
a3canvas_window.setLocation(100 , 100);
a3canvas_window.getContentPane().add( A3Canvas.createA3Canvas() );
a3canvas_window.setVisible(true);
}
}
//------------------------------------------------------------------------------
これのクラスファイルをjarファイルにしてダブルクリックまたは

java -jar Sample.jar

で実行しようとしたのですが

Exception in thread "main" java.lang.NoClassDefFoundError: jp/sourceforge/acerol
a3d/a3/A3Canvas
Caused by: java.lang.ClassNotFoundException: jp.sourceforge.acerola3d.a3.A3Canva
s
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)
Could not find the main class: Test2. Program will exit.

とエラーメッセージが出て実行できませんでした。
アプレットでの実行ではなくjarファイルから実行する方法はないのでしょうか?
Reply to #38767

RE: テスト (2010-02-08 10:15 by ksaito0717 #48406)

どうも。管理者です。返信遅くなってしまいましたが、
フォーラムへの初投稿ありがとうございます。

質問の件ですが、私も以前同じようなことで悩んで、
結局あきらめた記憶があります。これはjarファイルから
実行した時に、CLASSPATH環境変数などが無視されるのが
原因です。私の目的には合いませんでしたが、以下のページの
後半で解決法がいくつか解説されていたので紹介します。

* <http://www.fk.urban.ne.jp/home/kishida/kouza/old/javajar.html>

話はかわりますが、添付してもらったソースでJWindowを
使われてますね。もし良ければAcerola3DのA3Widgetの使用も
検討してみると良いかもしれません。解説は以下のページに
あります。

* <http://acerola3d.sourceforge.jp/docs/programming/a3CanvasInterfaces/>

また何かあれば投稿して下さい。
Reply to #48352

RE: テスト (2010-03-16 00:05 by hide13579 #49498)

A3WinsouクラスのsaveImage(java.io.File file)メソッドを試してみました。

import jp.sourceforge.acerola3d.a3.*;
import java.io.*;

public class HelloA3 {
public static void main(String args[]) throws Exception {
A3Window window = new A3Window(300,300);
Action3D a3 = new Action3D("x-res:///axis.a3");
window.add(a3);

File picFile = new File( "pic.png" );
window.saveImage(picFile);
}
}

イメージファイルは作成されるのですが、開いてみると真っ黒でした。
Reply to #38767

RE: テスト (2010-03-16 16:08 by ksaito0717 #49507)

報告ありがとうございます。書いてもらったプログラムを
そのまま、こちらの環境で実行してみたところ上手く
キャプチャーできているのですが、たぶん少し環境に
依存するところがあるかもしれません。試しに
window.add(a3);の後にThread.sleep(1000);のように
一行入れて少し時間を置いてからキャプチャさせる
ようにしてみたらどうでしょう?それでもダメでしたら
実行環境など教えて下さい。

ちなみに、saveImageメソッドはJA3Windowや他の
A3CanvasInterfaceを実装するクラスにもあるのですが、
きちんとコードを書いていないのでA3WindowとA3Canvas
でしか動作しないと思います。

また何かあれば報告下さい。
Reply to #49498

RE: テスト (2010-03-18 15:49 by hide13579 #49570)

実行環境のOSはWindows2000でした。

Thread.sleep(1000);を加え実行してみましたが、真っ黒な状態でした。
スリープ時間を長めにしても同様な結果でした。

環境の違いを考えてなかったので、XPで試してみたら綺麗に表示されました。
Reply to #49507

RE: テスト (2010-03-18 17:45 by ksaito0717 #49571)

報告ありがとうございます。Windows2000は手近に無いので
わかりませんが、もしかしたらグラフィックスドライバの
更新などしてみると改善されるかもしれないですね。

余談ですが、64ビット版のWindowsではAcerola3Dが動作しない
ことに最近気付きました。これも手近に環境が無いのですが、
可能なら早めに対応したいと考えてます。
Reply to #49570

RE: テスト (2010-10-08 03:28 by hide13579 #53265)

最近HelloA3.javaの
Action3D a3 = new Action3D("x-res:///***.a3");
で読み込むときに次の文が出ます。
-------------------------------------------------------------------------------
acerola3d.action3d.sound=JOAL_DIRECT
invokeLater
JAVA 3D: OpenGL 1.2 detected; will run with reduced functionality
java.lang.NullPointerException
at java.io.ByteArrayInputStream.<init>(Unknown Source)
at jp.sourceforge.acerola3d.RZipURLConnection.connect(RZipURLConnection.
java:66)
at jp.sourceforge.acerola3d.RZipURLConnection.getInputStream(RZipURLConn
ection.java:81)
at java.net.URL.openStream(Unknown Source)
at jp.sourceforge.acerola3d.a3.Action3DData.loadCatalog_NEW(Action3DData
.java:636)
at jp.sourceforge.acerola3d.a3.Action3DData.loadCatalog(Action3DData.jav
a:617)
at jp.sourceforge.acerola3d.a3.Action3DData$1.run(Action3DData.java:571)

at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessController.doPrivilegedWithCombiner(Unknown Sourc
e)
at jp.sourceforge.acerola3d.a3.Action3DData.init(Action3DData.java:568)
at jp.sourceforge.acerola3d.a3.Action3DData.<init>(Action3DData.java:563
)
at jp.sourceforge.acerola3d.a3.Action3D.realConstructor(Action3D.java:11
1)
at jp.sourceforge.acerola3d.a3.Action3D.<init>(Action3D.java:85)
at HelloA3.main(HelloA3.java:10)
-------------------------------------------------------------------------------
その後読み込みが終わり普通に動くのですが原因がわかりません。
axis.a3は何も出ないで普通に動きました。
新しく作ったA3オブジェクトファイルで出るようです。
Reply to #38767

RE: テスト (2010-10-08 09:56 by ksaito0717 #53266)

ご連絡ありがとうございます。このエラーはおそらく
Acerola3Dファイルに含まれるCATALOG.XMLファイルの
ファイル名の違いに起因するものだと思います。
このCATALOG.XMLファイルのファイル名は本来全て
大文字でCATALOG.XMLと表記するのが正しいのですが、
あるOSのあるファイルシステムでは全部大文字のファイル
というのが作成できないようで、どうしてもcatalog.xmlに
なってしまいます。この対処として、CATALOG.XMLが読み
こめなかった場合はcatalog.xmlというファイルで再読み込み
します。つまり、そのエラーはCATALOG.XMLが読み込めなかった
時に出ているエラーだと思います。最近になってエラーが出る
ようになったというのは、使っているOSを変更したとかが
原因ではないでしょうか?

実際のところAcerola3Dのエラー処理は、まだまだなところ
があって、上記のエラーも表示させないようにするべきです
よね。こんどのバージョンでは直しておきたいと思います。

それでも問題がある場合は、またご連絡下さい。
Reply to #53265

RE: テスト (2010-10-13 05:39 by hide13579 #53338)

最近作ったAcerola3Dファイルに含まれるCATALOG.XMLファイルの
ファイル名を確認したら全て小文字になっていました。
大文字に変えて作り直したAcerola3Dファイルを使うと
エラーが出ずに実行することができました。ありがとうございました。
Reply to #53266