簡単な暴走プログラムとは?

このQ&Aのポイント
  • 簡単な暴走プログラムとは、ボタンをクリックするとclassのディレクトリ文字を追加するプログラムのことです。
  • しかし、ボタンをクリックするとテキストエリアへの書き込みが止まらず、原因がわかりません。
  • どこが悪いのか、どう修正すればいいのでしょうか?
回答を見る
  • ベストアンサー

簡単な暴走プログラム

ボタンをクリックすると、classのディレクトリ文字を追加するという プログラにしようと思っています。 ボタンをクリックすると、テキストエリアへの書き込みが止まりません。 ソースではループしているように見えないから原因不明です。 どこが悪く、どう直せばいいんですか? import java.awt.*; public class aaaa0 extends java.applet.Applet { Button btn; TextArea ta; public void init() { add(ta = new TextArea(50, 50)); add(btn = new Button("Btn")); } public boolean action (Event e, Object o) { if (e.target == btn) { String str = ""; String buf = ""; str = getCodeBase().toString(); buf = ta.getText(); ta.setText(buf + "\r\n" + str); } return super.handleEvent(e); } }

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

こりゃ目隠しして迷路歩いてるようなもんですなぁ(笑 結論だけ言えば。。。 return super.handleEvent(e); を。。。 return true; にすればループは起きません。 action()の戻り値にsuper.handleEvent()は記述しない で下さい、super.handleEvent()を記述するのは。。。 public boolean handleEvent(Event e){   ・・・・・・・・・;   ・・・・・・・・・;   return super.handleEvent(e); } とhandleEvent()の時だけです。 他のイベント処理は return true; です。 public boolean action(Event e,Object o){   ・・・・・・・・・;   ・・・・・・・・・;   return true ; } で、先程の時も気になったのですが、かなり古い参考書 とJDK1.1以前のコンパイラ使ってませんか? 悪い事いいませんから新しい参考書と最新のJavaSDKを 入手される事をお奨めします。 今記述しているソースコードはJDK1.0.2という古い記述です。 これをコンパイルして警告が出ないのをみると、コンパイラ も相当古いものになります。 特に、JDK1.0からJDK1.1のJavaの変更は大きなもので、 かなりの部分が違います。 JDK1.1の記述は現在の最新のものの基礎となっており、 現在も通用しますが、JDK1.0の記述は誰にも使われなく なっており、今から覚えても殆ど無意味です。 最低でもJDK1.1対応と謳われている参考書を探して購入 して下さい(できるならJava2→JDK1.2以降が良いです) 残念ですが、今悩んで解決しようとしている事を続けて も無駄な労力になると思って間違いありません。 新しいJavaの参考書には良書(初心者にとって)が多い と聞きます(良書があるのに利用しないのは勿体無い) せっかく出だしなのですから、無駄な躓きは避けるべき ではないでしょうか。

rasuck
質問者

お礼

ありがとうございます。言われてみれば、そこだけは 理解できてなくて、そこが原因とも考えていませんでした。 return true; で解決しました。 super.handleEvent()はネットで見つけたソースをそのまま 使っていたもので、そう書けばいいものとばかり思っていました。

関連するQ&A

  • java通信について

    アプレットビューアは 通信成功できますが HTMLから実行すると失敗します so = new Socket( "localhost", 80 ); この部分が失敗してるようです なぜ起こるんでしょうか ? 解決方法を教えてください。 //html <html><body> <applet code = "a.class" width = "370" height ="530"></applet> </body></html>   //<applet code = "a.class" width="400" height = "200"></applet> import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class a extends java.applet.Applet implements ActionListener{ TextField tf; Button b; TextArea t; Panel p, p1; String str = "http://localhost/cgi-bin/a.cgi"; public void init(){ tf = new TextField( 32 ); b = new Button( "Post" ); t = new TextArea( 20, 48 ); b.addActionListener( this ); p = new Panel(); p.add( new Label( "String" ) ); p.add( tf ); p.add( b ); p1 = new Panel(); p1.add( t ); add( p ); add( p1 ); } public void actionPerformed( ActionEvent e ){ String str; if( e.getSource() == b ){ t.setText( sen( tf.getText() ) ); } } private String sen( String a ){   Socket so = null; InputStreamReader in = null; OutputStream os = null; String str1 = new String(); try { t.setText( "aa" ); so = new Socket( "localhost", 80 ); t.setText( "bb" ); in = new InputStreamReader( so.getInputStream() ); os = so.getOutputStream(); }catch( Exception e ){ return "Error!"; } String H = "POST " + str + " HTTP/1.0\n"; H += "Content-Length:" + String.valueOf( a.length() ) + "\n\n"; String st = new String( H + a ); try{ os.write( st.getBytes() ); }catch( Exception e ){ return "Error!"; } str1 = "Send:\n" + st; boolean bo = true; StringBuffer sb = new StringBuffer(); int s; while( bo ){ try{ s = in.read();   if( s == -1 ) bo = false; else sb.append( (char)s ); }catch( Exception e ){ bo = false; } } str1 += "\nResv:\n" + sb.toString(); return str1; } }

    • ベストアンサー
    • Java
  • CGIにPOSTでアクセス

    import java.net.*; import java.io.*; import java.awt.*; public class ccc28 extends java.applet.Applet { TextField tf; Button btn; TextArea ta; public void init() { setLayout(new BorderLayout()); tf = new TextField(20); btn = new Button("Submit"); ta = new TextArea(5, 25); add("West", tf); add("East", btn); add("South", ta); } public boolean action (Event e, Object o) { if (e.target == btn) { try { URL url = new URL("http://www.odn.ne.jp/aaa/test.cgi"); URLConnection uc = url.openConnection(); uc.setDoInput(true); uc.setDoOutput(true); uc.setUseCaches(false); PrintWriter pw = new PrintWriter(uc.getOutputStream()); pw.print("a"); pw.close(); } catch(java.security.AccessControlException er) { ta.setText(er.getMessage()); } tf.setText("処理完了"); return true; } return false; } } アプレットビューアからの実行では、 tf.setText("処理完了"); は実行されました。 catchのta.setText(er.getMessage());も実行されて、 access denied (java.net.SocketPermission www.odn.ne.jp resolve) と書かれていました。 実際にアップロードしてからの実験ではボタンを押しても、テキストエリアにもテキストフィールドにも何も表示されませんでした。 どっちの実験でも、CGIへのアクセスができませんでした。 CGIはカウンターです。アクセスさえできればいいんだけど、 http://www.tetras.co.jp/yada/j_java_cgi_r.htm のサイトに書いてあった getAppletContext().showDocument(url); を使うと、ページがCGIに飛んでしまったから、POSTでアクセスしたいと思っています。 このソースをどう直せばいいんですか?

  • 動作しないプログラム

    このようなプログラムです。 /*<applet code = "Lesson14.class" width = 300 height =200></applet>*/ import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class Lesson14 extends Applet{ Button myBtn; Label mylbl; public void init(){ setBackground(Color.pink); setLayout(new BorderLayout()); myBtn = new Button("Clickしてね"); mylbl = new Label("",Label.CENTER); add("North",myBtn); add("Center",mylbl); myBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ repaint(); } }); } public void paint(Graphics g){ mylbl.setText("clickしたな!"); } } ---------------------------------------- はじめにmylblに””と何も入れておかずに、 後からsetTextで、文字をいれ、クリックされたときにrepaint()にて、表示される、という単純なものです。 しかし動作しないのです。 書籍を見ながらやったほうも、CDーROM殻読み出したものもだめでした。 僕の動作環境は1.4.1_03でXPと2000です。 その書籍は少し古くて1.3.0と書いてあります。 バージョンアップによってうまく動作しないのでしょうか・・・??

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えてください!

    Genericsを使ってエラーの出ないようにするにはどうすればいいですか? import java.util.*; public class Sample{ public static void main(String[] args){ ArrayList ary = new ArrayList(); ary.add("Mac"); ary.add("Wiindows"); ary.add("Linux"); for(Object str:ary){ System.out.println((String)str); } } }

    • ベストアンサー
    • Java
  • アプリケーション

    初歩的な質問ですが下のプログラムを書いたのですが表示されませんでした。下のプログラムのどこが間違ってますか? これが問題です。 ・フレームに部品を配置するプログラムを作成しなさい。  BorderLayoutによりボタン1,テキストエリア,ボタン2が配置  ボタン1をクリックするとテキストエリアに文字を埋める  ボタン2をクリックするとテキストエリアをクリアする import java.awt.*; import java.awt.event.*; class MyFrame extends Frame implements ActionListener { TextArea txtar1; Button btn1, btn2; public MyFrame(String title) { super(title) ; // タイトル設定 addWindowListener(new WindowAdapter(){// 閉じるボタン対応 public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void init(){ setLayout(new BorderLayout(5,5)); // 文字列表示のボタンをBorderLayoutの北に配置 btn1=new Button("文字列表示"); add(btn1,BorderLayout.NORTH); txtar1 = new TextArea(); add(txtar1,BorderLayout.CENTER);// テキストエリアをBorderLayoutの中央に配置 btn2=new Button("文字列クリア"); add(btn2,BorderLayout.SOUTH); // 文字列クリアのボタンをBorderLayoutの南に配置 } public void actionPerformed (ActionEvent e) { // ボタン押下対応 if (e.getSource() == btn1) { txtar1.setText("AAAAAAAAAA\nBBBBBBBBBB\nCCCCCCCCCC\n"); } else if (e.getSource() == btn2) { txtar1.setText("");   }  } } public class JaFram { public static void main(String args[]) { MyFrame frm = new MyFrame("フレームテスト"); frm.setSize(300, 200); // 窓サイズを横300,縦200にする frm.setVisible(true) ; // フレームを表示する  } }

  • アプレットでボタンを押したときの処理について質問です。

    JAVAで2つのクラスを作成しました。 1つは初期画面で「入力」「検索」等と言ったボタンを持ち、ボタンを押されると別の画面に切り替えるクラスです。もう1つは初期画面で「入力ボタン」を押されて表示する画面のクラスです。 初期画面でボタンが押されたときの処理を次のようにしました。 public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals("入力")){ Input input = new Input(); } ですが、Inputクラスの画面が表示されません。 Inputクラスのソースは import java.awt.*; import java.awt.event.*; import java.applet.*; /* <applet code="Input" width=250 height=250> </applet> */ public class Input extends Applet { Panel panel; TextArea textarea; public void init()//部品を初期化する { panel = new Panel(); textarea = new TextArea(); setLayout(new BorderLayout()); add(textarea,BorderLayout.CENTER); add(panel,BorderLayout.SOUTH); } } です。ボタンを押された時のイベントを受け取るまでの処理は正しいと思うのですが、どのように改良すればよろしいでしょうか?

    • ベストアンサー
    • Java
  • 小数の2進数変換について教えてください。

    10進数を2進数に変換するプログラムを作ったのですが、 小数の2進数変換が出来ません。 小数を2進数に変換するにはどうしたらいいのでしょうか? よろしくお願いします。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class Applet1 extends Applet { TextField textField1 = new TextField(10); TextField textField2 = new TextField(10); Button displayButton1 = new Button("2進数変換"); public void init() { displayButton1 = new Button("2進数変換"); add(new Label("10進数")); add(textField1); add(textField2); add(displayButton1); displayButton1.addActionListener(new ToBinaryAction()); } class ToBinaryAction implements ActionListener{ public void actionPerformed(ActionEvent e) { int x = Integer.valueOf(textField1.getText()).intValue(); textField2.setText(Integer.toBinaryString(x)); } } }

    • ベストアンサー
    • Java
  • HTMLファイルを開きたい

    こんにちは、いつもお世話になっています。 質問があります。 アプレットでボタンを押すと、 HTMLファイル「c:/test_folder/test.html」 を開きたいのですが、 下記コードの(☆) のところに何を書いていいかわかりません。 どなたかご存知でしたら教えていただけないでしょうか? よろしくお願いします。 ============================================================= import javax.swing.*; import java.awt.*; import java.applet.Applet; import java.awt.event.*; import java.net.*; public class situmon extends Applet implements ActionListener { JPanel panel; JButton button; public void init() { panel=new JPanel(); button=new JButton("次へ"); button.addActionListener(this); panel.add(button); this.add(panel); } public void actionPerformed(ActionEvent e) { if(e.getSource()==button) { (☆); } } }

    • ベストアンサー
    • Java
  • JAVAアプレット(簡易計算機)のプログラム

    足し算を行うだけのプログラムを組むことができたのですが、 四則演算を行いたいと考えています。 下記のようなプログラムでは、ボタンが=のボタンなのですが、 そのボタンを+,-,*,/の4つにおきかえて、各ボタンを押したときに 各ボタンの処理を行うのはどのようにすればいいのでしょうか? 分かる方、ご教授よろしくおねがいします。 import java.applet.Applet; import java.awt.*; // java.awtパッケージのインポート import java.awt.event.*; public class SampleD10L2 extends Applet { private Button btn_culc; // +ボタン private TextField txt_A, txt_B, txt_answer; // 数値入力用テキストボックス public void init() { // ボタンのインスタンスを作成 btn_culc = new Button("="); // ボタンのイベント処理を定義 btn_culc.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { // txt_Aに入力された値 + txt_Bに入力された値を計算 int intAnswer = Integer.parseInt(txt_A.getText()) + Integer.parseInt(txt_B.getText()); // 答えをtxt_answerに表示 txt_answer.setText(Integer.toString(intAnswer)); } }); // コンポーネントの初期化 txt_A = new TextField("0", 3); txt_B = new TextField("0", 3); lbl_plus = new Label(" + "); txt_answer = new TextField("0", 5); // コンポーネントを追加 this.add(txt_A); // 自分自身のaddメソッドを呼び出す(this.は省略可能) this.add(lbl_plus); this.add(txt_B); this.add(btn_culc); this.add(txt_answer); } }

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java

専門家に質問してみよう