• ベストアンサー

Java Appletでの配列継承

A.javaのTextFieldで入力した文字列を配列(String i[])に入れていき、B.javaでその配列を読み込みたいのですがうまくいきません。 nullとしか表示されないのです。 どのようにしたらいいのでしょうか。 ご存知の方いらっしゃいましたら教えてください。 説明不十分でしたらその都度聞いてください。 よろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

A.javaとB.javaの関係が分からないと回答しづらいですね… (可能ならソース載せるといいかもしれません。) 両方ともAppletを継承したクラスで、画面AにAアプレットがあって、ボタンを押すと画面Bに変わって、Bアプレットが動き出す… とかなのか、 単にAppletを継承したクラスはA.javaのみで、B.javaはA.javaから呼ばれるだけのクラスなのか… とか… 試したわけじゃないので憶測ですが、前者ならちょっと工夫しないと無理そうですね…。 「工夫」がどういうものかは想像できてませんが…。(^^;A (なんとなく…セッションにオブジェクトを埋め込めばいいのかな?ぐらいにしか…) あまり回答になってなくてすいません。

Shangrila
質問者

補足

A.javaが public class A extends Applet implements ActionListener{ ・・・ } で B.javaが public class B extends A implements ActionListener{ ・・・ } という形です。 Aを起動し、入力した後Bを起動してAで入力した配列を読み込みたいのです。 説明が下手で申し訳ありませんがよろしくお願いします><;

その他の回答 (3)

回答No.4

こんにちは。 質問のタイトルと、pcbeginnerさんの回答に対する補足の内容から推測して書いていますけど、もし見当違いだったらゴメンなさい。 もしかして、クラスBはクラスAを継承している。つまり、Aの持つフィールド(インスタンスフィールド)がBに継承されている。だから、Aでそのフィールドに値を設定すれば、Bで参照できるのでは・・ なんて思っていませんか? >nullとしか表示されないのです。 この辺からもそんなコードを書いている感じがしたのですが。。 だとしたら、継承とはそういうものではありませんので、きちんと概念を学習された方が良いと思います。 ここで説明しようとすると、とんでもなく長くなってしまいそう。。。 で、もし上記が勘違いで、アプレット同士で通信がしたいと言う事でしたら、同一ページであればKyon2_PaPaさんがおっしゃっている様にAppletContextを使うのがスマートですかね。 あとは異なるページであっても、同じcodebaseのアプレットは、同一VM上に同じクラスローダーでロードされるようですので、staticな変数が共用される事になり、これでも実現できるはずです。 でも、色々なブラウザ依存が有りそうです。 その点はAppletContextも同じようですが。。。

Shangrila
質問者

お礼

回答ありがとうございます。 無事に終わることができました。 お礼に間が開いてしまい申し訳ありません。 AのTextFieldに入力した文字列を、AのStringで受け取りそれをBのほうの変数に入れて弄りたかったのです。 j[sd] = A.j[sd]; 上記のようにしたかったのです。 左辺がBの変数で、右辺がAの変数です。 説明が下手ですみませんでした。 回答してくださった方々、ありがとうございました。 この場を借りてお礼を言わせていただきます。 設立からかなりの時間がかかりましたが、終了させていただきます。

noname#49664
noname#49664
回答No.3

同一ページ内にあるアプレットなら、できますよ。 Applet applet = this.getAppletContext().getApplet("OtherApplet"); こんな感じで指定した名前のアプレットを取得し、そこからメソッドなりフィールドなりにアクセスすれば良いかと思います。ここではAppletで取得していますが、もちろん必要なクラスにキャストして利用すればいいでしょう。  注意したいのは、getAppletで指定するのはクラス名ではなく<applet>で指定したname属性という点ですね。  同一ページにないとなると・・ちょっと難しいかと思います。

Shangrila
質問者

お礼

回答ありがとうございます。 返信が送れて申し訳ありませんでした。 記載されたやり方でやってみたのですが、どうしても次の行でエラーが出てしまいます。

  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.2

 こんにちは。  私はCGIやサーブレットのことはさっぱりなので、あんまり信用してもらうと困ってしまうのですが、それらと連携させるとできるのかなぁと思うのですが・・・。  AからAppletContextでshowDocumentメソッドを呼ぶ時に、そのURLに情報を埋め込んで、CGIなりサーブレットなりで新しいHTMLを生成するときにそのアプレットタグの中のパラメータータグを設定する。  もしくは、文字列の入った配列を直列化して、サーバーにあげておいてBで受け取る。  どちらにしても、アクロバティックな様な気がします。  そもそも、AとBはそれぞれ独立したアプレットである必要性はあるのですか?  ひとつのアプレットにして、CardLayoutで切り替えるという形ではだめなのでしょうか?

Shangrila
質問者

お礼

回答ありがとうございます。 返信が送れて申し訳ありませんでした。 今回のAppletでは、サーバーとは無関係でやっていますので。。。 学校の課題でやっているのですが、例として見せてもらったときにそれぞれ独立したアプレットで動かしていたのでそのようにしました。 確かに、独立させる必要性はないですね。

関連するQ&A

  • java applet

    import java. applet.*; import java. awt. Button; import java. awt. Label; import java. awt. TextField; import java. awt. event.*; public class 1120 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private TextField box2 = new TextField(5); private TextField box3 = new TextField(5); private Label moji1 = new Label(" と "); private Label moji2 = new Label(" の和は "); private Label moji3 = new Label(" である。 "); private Button ok = new Button("OK"); public void init() { resize( 320 , 240); add( box1 ); add( moji1 ); add( box2 ); add( moji2 ); add( box3 ); add( moji3 ); add( ok ); ok.addActionListener( this ); } public void actionPerformed( ActionEvent e ) { int i=0 ,j =0 , k; String t1 = box1.getText(); String t2 = box2.getText(); i = Integer.parseInt( t1 ); j = Integer.parseInt( t2 ); k = i + j; String s = Integer.toString( k ); box3. setText( s ); } } //上記のプログラムを書いたのですが、なぜかエラーが出てしまいます。勿論、自分でも見直しましたが、その理由がわかりませんでした。知識のある方、ご回答の方お願いします。

  • 配列のソートと削除

    String型のstrToRemoveで与えられた文字列を配列から探し、あればそれ以降の配列の数字をすべて左にシフトします。 なので配列の大きさは1小さくなります。その結果の配列をreturnで返します。 例) ({"A","B","C","D","B"}, "B")配列1にBがあるのでそれ以降の文字列をすべて左にシフト→ {"A","C","D","B"} ({"A","B","C","D","B"}, "A") 配列0にAがあるのでそれ以降の文字列を左にシフト→ {"B","C","D","B"} プログラムは以下のように組みました。 public class ArrayFun { public String[] oneRemoved(String[] array, String strToRemove) { int count = 0; for (int i = 0; i < array.length; i++) {      if (strToRemove.equals(array[i]) && count == 0) {        for (int j = i; j < array.length - 1; j++) {          array[j] = array[j + 1];        }          count++;      } }      array = new String[array.length - 1];      array[array.length - 1] = null;      return array; } } ちなみにcountは、一度シフトすればもう同じ文字列がそれ以降の配列にあってもシフトはしないので、countでシフトしたかどうかを判断しようと思い付けました。 これでテストメソッドも作るのですが、 import static org.junit.Assert.*; import org.junit.Test; public class ArrayFunTest { @Test public void testoneRemoved() { ArrayFun af = new ArrayFun(); String[] a1 = {"A","B","C","D","B" };//元の配列 String[] a2 = {"A","BB","CCC","DDD","B"};//元の配列 String[] a3 = {"B","C","D","B"};//シフト後の配列 String[] a4 = {"A","BB","CCC","DDD","B"};//シフト後の配列 assertEquals(a3, af.oneRemoved(a1, "A")); assertEquals(a4, af.oneRemoved(a2, "NotHere")); } } 以上のように組むと、assertEqualsの真ん中に黒線が入って自動的に@SuppressWarnings("deprecation")が加えられてしまいます。 実行結果は、({"A","B","C","D","B"}, "A") の例だと、配列0にB が入るはずがnullになっている、とエラーがでます。 どのようにしたら正常に動かせるでしょうか?宜しくお願いします。

    • ベストアンサー
    • Java
  • JAVA 配列

    JAVAの配列の問題で複数の人間の名前と住所を出力するクラスをつくり表示するというのがあるのですが、わかりません。教えてください。 多分以下のような感じだと思うのですが・・・。 class Chap7_2{ String[] friends,address; Chap7_2(String[] f,String[] ad){ friends=f; address=ad; } void showName(){ System.out.print("My name is"+friends+". Address is"+address+"."); } public static void main(String[]args){ String[] name={"Sayaka Kikumoto","Akiko Hayakawa","Chika Kondo"}; String[] ken={"Mie","Aichi","Ehime"}; Chap7_2 a=new Chap7_2(name[i],ken[i]); for(string i=0;i<a.length;i++); a.showName(); } } }

    • ベストアンサー
    • Java
  • JAVAの継承について

    JavaでクラスA,B,Cがあり、A,BはクラスCを継承しています。 この時にAのインスタンスを生成しCにある変数に値を設定します。 この設定した情報をBのインスタンスに一気に設定することは可能でしょうか? やりたいこととしてはAに設定した情報をBにコピーするようなイメージです。 すべてのsetterを呼びだして設定するのが面倒なので。 例)構文的に間違ってるかもしれませんがやりたいことは以下のような感じです。 A a = new A(); a.setStr("aaa"); a.setInt(5); B b = new B(); b.setStr(a.getStr()); b.setInt(a.getInt(); class A extends C{} class B extends C{} class C {  int x = 0;  String str = "";  private String setStr(String str){this.str=str;}  private String setInt(int i){this.x=i;}  private String getInt(){return this.x;}  private String getStr(){return this.str;} }

    • ベストアンサー
    • Java
  • java アプレット

    学校の授業でアプレットを学んでいます。 しかし・・・ 下のプログラムで、計算した結果をlabel3にはりつけたいのですが、計算結果がでてくれません・・・ボタンを押しても何もでてきません。 コマンドプロンプトで、エラーはでてきません。 お手数ですが、誰かどこがいけないのか教えて下さい。 import java.awt.*; import java.awt.event.*; public class B extends java.applet.Applet implements ActionListener { Label label3 = new Label(); Button button2 = new Button(); TextField textfield1= new TextField(10); TextField textfield2= new TextField(10); public void init() { button2.setLabel("入力したらクリック!"); button2.setBounds(new Rectangle(50, 465, 120, 20)); this.setLayout(null); label3.setBackground(Color.blue); label3.setBounds(new Rectangle(325, 80, 200, 35)); textfield1.setBounds(100, 425, 100, 25); textfield2.setBounds(150, 350, 100, 25); this.add(textfield2, null); this.add(label3, null); this.add(textfield1, null); this.add(button2, null);} public void actionPerformed(ActionEvent event) {if(event.getSource() == button2) {int diff = Integer.parseInt(textfield1.getText()) - Integer.parseInt(textfield2.getText()); String otsuri; otsuri ="お釣りは"+ diff +"円です。"; label3.setText(otsuri);} }} よろしくお願いします。

    • ベストアンサー
    • Java
  • javaで配列の配列を使うには

    javaで、文字列3個を要素とするstringArray[3]を要素とする配列arrayArrayを使いたいのですが、どうすればよいでしょうか。 2011年10月2日

    • ベストアンサー
    • Java
  • javaでの文字判定

    javaにおいて16進数文字判定はどのようにするのでしょうか? 例えばString文字列が16進数文字0-9,a-f,A-Fで構成されているかどうかを 判定するにはどのようにすれば良いのでしょうか? このString文字列の長さは事前には分からず、数文字かもしれないし 数百文字かもしれません c言語の場合だとchar配列xyz[]があって中身が"1234abc"の場合 isxdigit()を使ってループでisxdigit( xyz[i] )として1文字づつ判定しNUL文字が 出現すれば終了となるわけですがjavaの場合だとどうするのでしょう? Stringの場合、byte[]の場合、char[]の場合それぞれ教えてもらえると助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Java applet

    Java appletを使用する課題なのですが、 途中まで書いて、それから止まってしまっています。 アドバイスなど頂ければ嬉しいです。 課題は、 (1)右から左へ動く文字列左から右へ動く文字列とを表示 (2)文字列が消えたらまた出てくるようにする (3)マウスのクリックボタンを押すと止まり、離すと動きだすようにする (2)まで考えたプログラム(コンパイル、実行済)を以下に載せます。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class SasakiYui extends Applet implements Runnable{ Thread th = null; Graphics g; int x; public void init(){ setBackground(Color.white); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void run(){ while(!Thread.interrupted()){ for(x=600;x>-300;x=x-5){ repaint(); try{ Thread.sleep(50); } catch(InterruptedException e){} } } } public void paint(Graphics g){ g.drawString("Happy Brithday!",x,10); g.drawString("Happy Birthday!",600-x,40); } } (3)ができるようにするには、 addMouseListener(new Mouseadapter(){ public void mousePressed(MouseEvent e){……} を使用するのだろうとは思うのですが、 ・これを組み込むのはpublic void init(){の後で良いか ・……の部分に何を書けばいいのか の2点がわかりません; よろしければ、アドバイスお願い致します!

    • ベストアンサー
    • Java
  • java 配列について

    public class Sample{ public static void main( String[ ] args ){ String x = "pen"; String[] y = new String[1]; y[0] = x; x = "pencil"; System.out.println(y[0]); } } java初心者です。 配列の参照先を変更して 配列の数を変更せず配列0に 実行時にpencilと表示させたいのですが よい方法はありますでしょうか?

    • ベストアンサー
    • Java
  • JAVAの配列関連

    java の配列について質問があります。 わかりそうでわからない、というところであります。 【質問】 以下のような要素数の不明な配列を1つの文字列にする場合 どの様に処理したら良いのでしょうか。 ただし、array には何らかの文字列が既に入っているとします。 (どのように for 文などでくくれば、上手く出来るでしょうか。) ArrayList<String> array = new ArrayList<String>(); int size = array.size(); String str = null; if(size == 0){    str = (array.get(0)); } else if(size == 1){    str = (array.get(0) + "," + array.get(1)); } else if(size == 2){    str = (array.get(0) + "," + array.get(1) + "," + array.get(2)); } else if(size == 3){    str = (array.get(0) + "," + array.get(1) + "," + array.get(2) + "," + array.get(3)); } else if(size == 4){    str = (array.get(0) + "," + array.get(1) + "," + array.get(2) + "," + array.get(3) + "," + array.get(4)); }・・・ この if文 の部分を for文 ですっきりさせたいのですが どうにも思いつきません。 ご存知の方いらっしゃいましたら お力添えをお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう