- PR -

JavaAppletから呼び出し元のJavaScriptを参照したい

投稿者投稿内容
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2002-11-12 21:55
こんにちは。早速ですが質問させて下さい。

JavaAppletから呼び出し元のHTMLに記述されたJavaScriptを
参照したいと思い、さまざまなサイトを調べたところ
次のようなことが書いてありました。

 (1)LiveConnectをDLして利用する
 (2)JREに含まれているnetscape.javascript.JSObject.classを利用する

開発がIEベースであることと(LiveConnectはネスケのもの)
なるべく標準で入っているものを使いたかったので、
SUNのサイトの方式に従い(2)でいくことにしました。

JDKのバージョンを統一する必要もあったので、手順として
 @J2SE1.3.1_06をインストール
 AJ2RE1.3.1_06をインストール
 BCLASSPATHにJ2SEのJREフォルダにあるjaws.jarを追加
 C"import netscape.javascript.*;"を記述したjavaソースファイルをコンパイル
のようにしたところ、コンパイルは通ったのですが、アプレットの実行時に
以下のようなエラーが発生してしまいました。

java.lang.NoClassDefFoundError: netscape/javascript/JSObject
    at drawPieGraph.init(drawPieGraph.java:28)
    at sun.applet.AppletPanel.run(AppletPanel.java:339)
    at java.lang.Thread.run(Thread.java:479)

コンパイル時にはあったクラスが実行時に見つからないとのことなのですが、
JSObjectクラスを使用するとき、B〜C以外に必要手順があるのでしょうか?
CLASSPATHに、J2REに入っている方のjaws.jarを追加して試しましたが
同様の結果でした。

どなたかご存知の方お願い致します。

[ メッセージ編集済み 編集者: Cookie 編集日時 2002-11-12 21:58 ]
yu
ベテラン
会議室デビュー日: 2002/09/29
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2002-11-13 19:39
なんか、1996年頃、Netscape 2 の時代かなぁ?、似たようなことをやっていた
記憶があります。(笑)

基本的に、Sun マイクロシステムズが「Java」と呼んでいるものは、
java か javax パッケージに入っているものだけです。
それ以外のものは、他のJava実行環境には入っていることもあるし、
入っていないことも多々あります。

特に、IE は JDK1.1.4 ベースですし、netscape.javascript.JSObject
が入ってないのではないでしょうか。

IE で LiveConnect を使うことに問題はないのですが、
MacOS 版の IE では、LiveConnect に対応していないですし、
多分、将来も対応させるつもりがなさそうなので、気をつけてください。

冗談ですが、 http://orto.jp/ を使うという方法はいかかですか?
(冗談です。ただの宣伝です。)
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2002-11-14 13:00
>yu様
ご意見ありがとうございます。

>特に、IE は JDK1.1.4 ベースですし、netscape.javascript.JSObject
が入ってないのではないでしょうか。

開発環境もランタイムも1.3.1_06を使用しているので、
IEで1.1.4以上のアプレットを見ようとした時はPlug-inから
1.3.1_06を使えるのではないでしょうか?

問題のJSOBJECTクラスは、開発環境とランタイムそれぞれに入っている
jaws.jarというアーカイブ内を覗いてみたところちゃんと入っていたので、
片方ずつパスを通してやってみたのですが、実行出来ませんでした。
実行時は一体どこへ見に行っているのでしょう。

ちなみに、LiveConnectも試してみました(LiveConnectSDKをDLして解凍、
java_30.zipにパス通し)が、結果は同じでした。
苦肉の策で、jaws.jarを解凍してnetscapeパッケージ以下を
アプレットと同ディレクトリに置いてコンパイルしてみたりもしましたが
コンパイラがバグってしまいました。(笑)

開発しているシステムはWindows専用ですので、
使えさえすればLiveConnectでも大丈夫なのですが…

 http://orto.jp/ 、面白そうですね。
 納期が迫っているので今からシステムには使えませんが
 趣味でちょっとやってみようかな(笑)
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2002-11-14 16:00
どうも初めまして。
なんかすごく懐かしい事をやっているので思わず投稿してしまいました(笑)

確か・・・以前試して見た時には、JSObject class がどこにも見つからなかったので、わざわざNetscape Communicatorをインストールした記憶があったような・・・

って、jaws.jarの中に入っているんですね?

なら、クライアント側で、
コントロールパネル→Java Plug-in xxxx→java実行時のパラメータ
で、classpathを設定してやれば動作するはずです。

>冗談ですが、 http://orto.jp/ を使うという方法はいかかですか?
orto、面白いですね。
サルトラ算の意味がわからないまま、1234+5678を実行してしまってディスプレイの前に釘付けになってしまいました(笑)
yu
ベテラン
会議室デビュー日: 2002/09/29
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2002-11-15 02:03
Cookie さんのやろうとしていることの細かいことがいまいちわかっていないのですが、
JavaScript は IE のエンジン(VM)で動いていますし、
Java は サンの JavaVM 上で動いているのですから、
この2つをつなぐことは不可能なのではないでしょうか?

IE 上で動くようにするには、IE の JavaVM を使わざるをえないのでは
ないでしょうか?

実際にコードを動かしたわけではないので、違ったらごめんなさい。

> サルトラ算の意味がわからないまま、
> 1234+5678を実行してしまって
> ディスプレイの前に釘付けになってしまいました(笑)

そうなんです。冬寂さんのハートを釘付けにしてしまったことに、
このサンプルの真のユーモアが隠されているんです。
なぁ〜んちゃって。

またまた宣伝。
http://orto.jp/tutorial/GUI/Style/Style.html
が結構、自分としては面白いと思っているのですが、
いかがでしょうか。

って、別なスレッドを立てるべきなんだろうなぁ...

まさ
ベテラン
会議室デビュー日: 2002/11/15
投稿数: 74
投稿日時: 2002-11-15 12:39
> CLASSPATHに、J2REに入っている方のjaws.jarを追加して試しましたが
> 同様の結果でした。

JavaApplet に対して CLASSPATH を指定したの?
OS に対して CLASSPATH を指定したの?

<PARAM NAME="ARCHIVE" VALUE="jaws.jar">

でもだめ?
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2002-11-15 12:59
いろいろご意見ありがとうございます。
ひとまず結果をご報告しますが、無事実行出来ました。
あれこれやっているうちにjdkが壊れたのか、アプレット全般が
実行できなくなってしまったためランタイムのみ1.4.0を
入れ直したところ、実行出来ました。
(同じバージョンが入っている別端末では未だに出来ないので、
根本的には何も解決していないのですが… )

>まさ様
ご意見ありがとうございます。
えーと、OSに対してです。システムのプロパティの環境変数で
CLASSPATHに指定し、その状態でコンパイルしたものを
ごく普通に
<APPLET CODE="hoge.class" WIDTH="50" HEIGHT="50" MAYSCRIPT></APPLET>
で呼びました。パラメータタグはシステムで使うデータのみ。
パスを設定したのはシステムだけでした。

>yu様
このアプレットにはjava.awt.geomのArc2Dクラスも使用しているのですが、
ランタイム1.2.1では動かず、ランタイムのみ1.3.1_06に上げたところ
表示されるようになったので、関係はある…と思います。
ランタイムを上げれば動くとも限らないので、難しいのですが…

目的詳細を説明しないまま質問ばかりしてしまったので、改めてポイントを挙げますと
・CD-ROMからの直接起動で動く、ブラウザベースのDB検索システムを作成している。
・対応はWindows95〜2000でIE専用。Javaランタイムを必要に応じて同梱する。
・表示はHTMLがベースで、JavaScriptで画面遷移を管理している。
・グラフの表示機能をアプレットで実現しているが、クリックイベント検知で
 呼び出し元のHTMLに記述されたJavaScriptを使って画面遷移したい。

これで説明になってるでしょうかね…?(汗)
おおざっぱには、これだけのことを実現出来れば良いのですが、
ユーザは初心者がメインで、ユーザの手でややこしい設定等をさせなくとも
ちゃんと動くことが条件で出されているため、プログラムで全部
頑張らないといけないんです…

> サルトラ算の意味がわからないまま、
> 1234+5678を実行してしまって
> ディスプレイの前に釘付けになってしまいました(笑)

私は10000+20000をやってしまいました。(笑)
yu
ベテラン
会議室デビュー日: 2002/09/29
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2002-11-15 14:35
なんか、僕、間違ったことを書いてしまったようですね。
ごめんなさい。

スキルアップ/キャリアアップ(JOB@IT)