プロが教えるわが家の防犯対策術!

以下のような、アプレットのプログラムを作ったのですが、コンパイルは通るのですが、アプレットの初期化のところで止まってしまいます。理由と解決策を教えてください。

javac dev_java\TargetApplet\*.java ← これはOK

appletviewer dev_java\TargetApplet\TargetApplet.java ←init() で止まる。

(ソース一部抜粋)
package dev_java.TargetApplet ;

import java.applet.* ;
import java.awt.* ;
import java.awt.event.* ;
import dev_java.Target.* ;  // 自作のpackage

/*
<applet code="TargetApplet" width=500 height=400>
</applet>
*/

public class TargetApplet extends Applet implements ActionListener, TextListener{
TextField Word ;
TextField Mean ;
TextArea Result ;
Button Search ;
Button Entry ;
EnglishDictionary ed ; /* 自作package dev_java.Target で宣言されているクラス*/

public void init()
{
Word = new TextField(20) ;
Mean = new TextField(20) ;
Search = new Button("Search") ;
Entry = new Button("Entry") ;
Result = new TextArea(20,40) ;

Word.addActionListener(this) ;
Word.addTextListener(this) ;
Mean.addActionListener(this) ;
Mean.addTextListener(this) ;
Search.addActionListener(this) ;
Entry.addActionListener(this) ;
// EnglishDictionary ed = new EnglishDictionary("dic/Target1900.dic") ;

this.add(Word) ;
this.add(Mean) ;
this.add(Search) ;
this.add(Entry) ;
this.add(Result) ;
}
}

A 回答 (2件)

うーん、、取り敢えず下記の通りのディレクトリ構成に


なっているかどうか確認してみて下さい。

codebase
  ├ dev_java
  │ ├ TargetApplet
  │ │  ├ TargetApplet.class
  │ │  └ TargetApplet.java
  │ └ Target
  │    ├ EnglishDictionary.class
  │    └ EnglishDictionary.java
  └ dic
    └ Target1900.dic

で、applet タグは

/*<applet code="dev_java.TargetApplet.TargetApplet" codebase="codebase" width=500 height=400></applet>*/

と、なっている事をもう一度確認してみて下さい。
("codebase" は任意のURLです)

で、1つ気になるのが、、

>new EnglishDictionary("dic/Target1900.dic") ;

という部分ですね。
文字列としてコンストラクタに送るだけでしたら問題
はありませんけど、もしEnglishDictionaryクラスで

File file=new File("dic/Target1900.dic");

などとして、ファイルを読み込もうとしているのでし
たら問題です。ファイルを読み込むのでしたらば、、
java.net.URL#openStream() でストリームを取得
して呼び込みをしなければいけません。
それにURLは、java.applet.Applet#getCodeBase()
を含まなければいけませんから。。。

EnglishDictionary ed = new EnglishDictionary(getCodeBase()+"dic/Target1900.dic") ;

という形でコンストラクタに文字列を渡して、、、

public EnglishDictionary(String url){
  URL url=new URL(url);
  InputStream is=url.openStream();
  ・・・・・・
}

コンストラクタでは上のような処理が必要になります。

以上、気になった部分を含め補足要求とします。
出来ればエラー情報を記述してもらえると助かります。
想像だけでは難しい。
    • good
    • 0

codebaseの指定をしなければならないのでは?


例えば、
http://**/**/dev_java/TargetApplet/TargetApplet. …
といった場合なら。。。

<applet code="dev_java.TargetApplet.TargetApplet" codebase="http://**/**" width=500 height=400>
</applet>

この回答への補足

codebase="..."をやってみても無理でした。

ちょっと補足ですが、ソースの先頭で
package dev_java.TargetApplet ;
の宣言をコメントアウトすれば、上手く動きますが、
自作で作った dev_java.Target package のEnglishDictinaryクラスのインスタンスの生成が出来ません。

補足日時:2003/11/12 10:16
    • good
    • 0
この回答へのお礼

有難うございます。参考にしてみます。

お礼日時:2003/11/12 09:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!