• 締切済み

Javaがうまく動作しない理由

Java初心者です。 下記のJavaのプログラムで(6)のところで(1)から(4)が呼び出されると(1)と(4)はうまく動作して画面に表示されるのですが(2)(3)がうまく動きません。ソースは長いので全部掲載できませんが、基本的にはほかの部分はうまく動いています。(5)ではうまくテキストフィールドfield2に文字が表示されます。 原因と対処方法を教えてください。 public ChatServer(){ ............ field1 = new TextField("ABC"); field1.setLocation(10,30); field1.setSize(150,25); field1.addActionListener(this); add(field1); field2 = new TextField("DEF"); field2.setLocation(10,60); field2.setSize(150,25); add(field2); ............ public void text1(String ss){ (1) System.out.println("1:*****" + ss); (2) field2.setText(ss); (3) field1.setText("AAA"); (4) System.out.println("2:*****" + ss); } public void actionPerformed(ActionEvent e){ String ss; if(e.getSource() == field1){ ss = field1.getText(); (5) field2.setText(ss); } } } class clientProc implements Runnable { ChatServer serv2 = new ChatServer(); ............. String line = in.readLine(); while (!"quit".equals(line)){ line = in.readLine(); (6) serv2.text1(line); System.out.println("***"); } .............. }

  • gorou
  • お礼率45% (83/184)
  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

僕の環境では、下の最小構成コードでとりあえずちゃんと動く。 (Java1.4.2_02/Java1.4.1/Java1.3.0_02、WindowsMe) コンパイル javac Client.java 実行 java Client ------------------- ということで、不具合がどの部分で起こっているのか特定できない場合、 「(不具合が再現する、)コンパイルかつ実行が可能な最小構成コード」を作ってみて、 それを丸ごと掲示するとよい。 //サーバ import java.awt.*; import java.awt.event.*; public class Server extends Frame { private TextField field1, field2; public Server() { setLayout(null); field1 = new TextField("ABC"); field1.setLocation(10,30); field1.setSize(150,25); add(field1); field2 = new TextField("DEF"); field2.setLocation(10,60); field2.setSize(150,25); add(field2); setSize(200, 160); setVisible(true); } public void text1(String ss){ System.out.println("1:*****" + ss); field2.setText(ss); field1.setText("AAA"); System.out.println("2:*****" + ss); } } //--------------------- //クライアント import java.io.*; public class Client { public static void main(String[] args){ Server serv2 = new Server(); //キーボード入力読み取り用 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); Client t = new Client(); String line = null; while (!"quit".equals(line)){ try { line = in.readLine(); } catch(Exception e) {e.printStackTrace();} serv2.text1(line); System.out.println("***"); } } }

gorou
質問者

お礼

わざわざありがとうございました。 原因は判明しました。

関連するQ&A

  • JAVAの初心者です.

    import java.io.*; class Sample3 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int meny; int max = 0; int kingaku[]; kingaku = new int[5]; char ss[][]; ss = new char[5][80]; do{ String hako = br.readLine(); meny = Integer.parseInt(hako); System.out.println("1:入力とその長さ"); System.out.println("2:データ入力"); System.out.println("3:データ表示"); System.out.println("4:おしまい"); switch(meny){ case 1: System.out.println("文字を入力してください。"); String input = br.readLine(); System.out.println(input + "は" + input.length + "文字です。"); break; case 2: if (max == 0){ System.out.printin("登録をしてからお選びください。"); }else{ System.out.println("名前を入力してください。"); String ss[max] = br.readLine(); System.out.println("金額を入力してください。"); String kingaku[max] = br.readLine(); System.out.println(ss[max] + "さんで" + kingaku[max] + "を登録します。"); max++; } break; case 3: System.out.println("現在登録人数は" + max + "人です。"); for(int aa = 0;aa<max;aa++){ System.out.println(name[max] + kingaku[max]); } break; } }while(meny != 4); } } 上記のソースなのですが、コンパイルで今のところ2つエラーが出てしまうのです。 String ss[max] = br.readLine(); String kingaku[max] = br.readLine(); の所がエラーと表示されます。 javaは入力した文字を表示するだけでしたら    = Integer.paruseint()する必要ないですよね?? 初心者ならではの質問でごめんなさい。 ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • 簡易電卓が作れない…

    簡易電卓を作ろうとしているのですが、どうしても分からない所があります。 とりあえずテストの為、以下のようなプログラムを作りました。 「dentaku.java」 import java.awt.*; import java.awt.event.*; class dentaku{ public static void main(String[] agrs){ Frame frame=new Frame("電卓"); frame.setSize(500,800); frame.setLayout(null); Button button0=new Button("0"); button0.setLocation(10,710); button0.setSize(80,80); Button buttonC=new Button("C"); buttonC.setLocation(100,710); buttonC.setSize(80,80); Button button1=new Button("1"); button1.setLocation(10,620); button1.setSize(80,80); Button button2=new Button("2"); button2.setLocation(100,620); button2.setSize(80,80); Button button3=new Button("3"); button3.setLocation(190,620); button3.setSize(80,80); Button button4=new Button("4"); button4.setLocation(10,530); button4.setSize(80,80); Button button5=new Button("5"); button5.setLocation(100,530); button5.setSize(80,80); Button button6=new Button("6"); button6.setLocation(190,530); button6.setSize(80,80); Button button7=new Button("7"); button7.setLocation(10,440); button7.setSize(80,80); Button button8=new Button("8"); button8.setLocation(100,440); button8.setSize(80,80); Button button9=new Button("9"); button9.setLocation(190,440); button9.setSize(80,80); Button buttonP=new Button("+"); buttonP.setLocation(280,440); buttonP.setSize(80,80); Button buttonM=new Button("-"); buttonM.setLocation(280,530); buttonM.setSize(80,80); Button buttonK=new Button("×"); buttonK.setLocation(280,620); buttonK.setSize(80,80); Button buttonW=new Button("÷"); buttonW.setLocation(280,710); buttonW.setSize(80,80); TextField nyuuryoku = new TextField(""); nyuuryoku.setLocation(10,380); nyuuryoku.setSize(350,50); TextField kekka = new TextField("0"); kekka.setLocation(10,320); kekka.setSize(350,50); button1.addActionListener(new dentaku_num(nyuuryoku)); button2.addActionListener(new dentaku_num(nyuuryoku)); frame.add(button0); frame.add(buttonC); frame.add(button1); frame.add(button2); frame.add(button3); frame.add(button4); frame.add(button5); frame.add(button6); frame.add(button7); frame.add(button8); frame.add(button9); frame.add(buttonP); frame.add(buttonM); frame.add(buttonK); frame.add(buttonW); frame.add(nyuuryoku); frame.add(kekka); frame.setVisible(true); } } 「dentaku_num.java」 import java.awt.*; import java.awt.event.*; class dentaku_num implements ActionListener{ TextField txt; int num=0; Button button1; Button button2; dentaku_num(TextField txt){ this.txt = txt; } public void actionPerformed(ActionEvent e){ if(e.getSource()== button1) {num=1;} if(e.getSource()== button2) {num=2;} txt.setText(String.valueOf(num)); } } 予想では、「1」を押したら下のテクストボックスに1が、「2」を押したら2が表示されると思いました。 しかし結果は、両方とも「0」が表示されるだけです。 不思議に思い、「if(e.getSorce)~」の2文を消してみたら、これも同じ結果でした。 どうやら、eを受け取っていない(?)ようなのですが、どの様にしたらうまく行くでしょうか。 見づらい分だとは思いますが、宜しくお願いします。

    • ベストアンサー
    • Java
  • java applet 上段に2×3、下段に1×3のボタンを作る

    タイトルのようなアプレットを作りたいのですがなぜか実行されません。どこがおかしいのでしょうか? (文字数制限のため省略) { private JButton bt[] = new JButton[9]; private JPanel pn[] = new JPanel[2]; int i; public void init() { Container cnt = getContentPane(); for(i=0; i<9; i++){ add(bt[i] = new JButton("")); } pn[0] = new JPanel(); pn[1] = new JPanel(); //上パネルに置くボタン6つ bt[0].setSize(80,80); bt[0].setLocation(0,0); bt[1].setSize(80,80); bt[1].setLocation(80,0); bt[2].setSize(80,80); bt[2].setLocation(160,0); bt[3].setSize(80,80); bt[3].setLocation(0,80); bt[4].setSize(80,80); bt[4].setLocation(80,80); bt[5].setSize(80,80); bt[5].setLocation(160,80); //下パネルに置くボタン3つ bt[6].setSize(80,80); bt[6].setLocation(0,200); bt[7].setSize(80,80); bt[7].setLocation(80,200); bt[8].setSize(80,80); bt[8].setLocation(160,200); //上パネルと下パネルの作成 pn[0].setLocation(0,0); pn[1].setLocation(0,200); //ボタンをパネルに付ける pn[0].add(bt[0]); pn[0].add(bt[1]); pn[0].add(bt[2]); pn[0].add(bt[3]); pn[0].add(bt[4]); pn[0].add(bt[5]); pn[1].add(bt[6]); pn[1].add(bt[7]); pn[1].add(bt[8]); //コンテナへ追加 cnt.add(pn[0]); cnt.add(pn[1]); } } 座標を指定してボタンを設置する方法にしたいと思っています。 ちなみに完成図はこのような感じにしたいです。 ↓ □□□ □□□ □□□

    • ベストアンサー
    • Java
  • java 会員登録プログラム

    2番目の参照で困ってます。Member.java といったクラスファイルを使ってます。コンストラクタやゲッター、セッター等が入ってます。省略箇所有りですがどうぞ宜しくお願いします。 public class MemberSystem { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ //loopを使い随時メニュー表示 boolean loop = true; while(loop){ System.out.println(""); System.out.println("ご希望のオプション番号を選択してください"); System.out.println("1>>登録 2>>参照 3>>検索 4>>削除 5>>保存 6>>読込 7>>終了"); String line = reader.readLine(); int n = Integer.parseInt(line); //ArrayList<Member>型のインスタンスを作成し、ArrayList<Member>型の変数rに代入 ArrayList<Member> r = new ArrayList<Member>(); switch (n) { case 1: System.out.println("登録>> 各情報を入力すると登録できます"); System.out.println("氏名"); String inputName = reader.readLine(); //エラーチェック 空入力 if(inputName.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } System.out.println("生年月日 例)2013/01/01"); String inputBirth = reader.readLine(); //エラーチェック 空入力 if(inputBirth.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } System.out.println("電話番号 例) 0901234567"); String inputTel = reader.readLine(); //エラーチェック 空入力 if(inputTel.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } //reader.redLineで取得したString型の情報を代入 r.add(new Member(inputName, inputBirth, inputTel)); System.out.println("下記、入力情報をストアし、会員ID番号を付加しました"); //入力情報と会員ID番号を表示 for(Member inputResult:r){ System.out.print(inputResult); } break; case 2: System.out.println("参照>> ご希望の会員情報を表示します"); System.out.println("会員ID番号を入力してください 例)0001"); //キーボード入力からデータを呼び込む String inputMemberID = reader.readLine(); //ここがうまくいきません。 for(Member inputResult :r) { if(inputMemberID.equals(inputResult.getID())){ //データ取得  System.out.println(inputResult); //エラーチェック 空入力 }else if(inputMemberID.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); //エラーチェック 番号がない時や一致していない時 }else{ System.out.println("あなたの会員ID番号は該当しません"); System.exit(0); } } break; case 3: System.out.println("検索>> ご希望の会員を検索します 検索方法を番号で選択してください"); System.out.println("1>>氏名 2>>生年月日 3>>電話番号"); //switchを使い、検索選択肢を表示 String search = reader.readLine(); int x = Integer.parseInt(search); switch (x) { case 1: System.out.println("氏名"); String searchName = reader.readLine(); for(Member inName : r) { if (searchName.equals(inName.getName())){ System.out.print(inName); } } break; case 2: System.out.println("生年月日"); String searchBirth = reader.readLine(); break; default: System.out.println("電話番号"); String searchTel = reader.readLine(); break; } break; case 4: System.out.println("削除>> ご希望の会員を削除します"); System.out.println("会員ID番号を入力してください 例)0001"); String deleteMemeb

  • java ファイル操作

    現在javaでファイル操作しファイルの文字列を検索したりファイルに文字列を追加したりする ものを作成しています。 現状のコードはこのような感じです。 class addresskensaku{ public static void main(String[] args)throws IOException{ System.out.println("数字を選択\n1.名前で検索\n2.年齢で検索\n3.出身地で検索\n4.追加"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //1が選択された場合 if(res == '1' || res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 System.out.println("検索結果 :"); while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[0].indexOf(str1) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2' || res == '2'){ System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String ol = o.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp =null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //完全一致 if (ol.equals(words[1])){ // System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //3が入力された場合 if(res == '3' || res == '3'){ System.out.println("出身地を入力してください。"); BufferedReader p = new BufferedReader(new InputStreamReader(System.in)); String pref = p.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[2].indexOf(pref) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //4が入力された場合 追加 if(res == '4' || res == '4'){ //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader n = new BufferedReader(new InputStreamReader(System.in)); String str2 = n.readLine(); //年齢入力 System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String str3 = o.readLine(); //住所入力 System.out.println("住所を入力してください。"); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String str4 = a.readLine(); //ファイルに書き込み try{ File file = new File("addressdata.txt"); FileWriter filewriter = new FileWriter(file, true); filewriter.write(str2+","+str3+","+str4+"\r\n"); filewriter.close(); }catch(IOException e){ System.out.println("e"); } } } } これをカプセル化し 各機能ごとにメソッドを分けて作ろうかなと思っています。 結果の出力はmainでやる予定です。

  • 今勉強中のjavaで。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • Java
  • JAVAの初心者です。

    import java.io.*; class Sample1 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); do{ System.out.println("1:入力文字整数確かめ"); System.out.println("2:終了"); String hako = br.readLine(); int sen = Integer.parseInt(hako); switch (sen){ case 1: System.out.println("整数を入力してください。"); String hako2 = br.readLine(); int hako3 = Integer.parseInt(hako2); if ((hako3%2)==0){ System.out.println("これは偶数ですね。"); } System.out.println("奇数ですね。"); break; case 2: System.out.println("終了いたします。"); break; } }while(sen != 2); } } 上記のように組んだのですが、}whileのところでエラー が出てしまうのです。 これってなぜなのでしょう?? 初心者特有の質問かもしれませんがご教授いただけたら嬉しいです。宜しくお願いいたします。 関係ないのかも知れませんがJDK1-5-006を使用してます。

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

    キーボードから入力をして、その後str[0][0]とstr[1][0]の文字を繋げたいのですがエラーとなってしまいます。どう変えたらよいでしょうか。 以下がプログラムです。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu3 { public static void main(String[] args) throws IOException { int KEYWORDMAX=10; int CNTMAX=100; String [][]str = new String[KEYWORDMAX][CNTMAX]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line=null; for (int i=0;i<KEYWORDMAX;i++){ System.out.println("第"+(i+1)+"番目のキーワードを設定しますか?(y/n)"); line=br.readLine(); if(line.equals("n")) break; for (int s=0;s<CNTMAX;s++){ System.out.println("キーワードを入力してください(終了=0)"); line=br.readLine(); if(line.equals("0"))break; str[s][i]=line; } } String keyword = new String(str[0][0]" "str[1][0]); System.out.println("キーワードは "+keyword); } } 以下はエラー表示です。 gugu3.java:24: ')' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: 文ではありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: ';' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ エラー 3 個

    • ベストアンサー
    • Java
  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java
  • java iを1づつ増やすプログラムと2づつ増やすプログラム

    次のようにすればiを1づつ増やして表示されます。 class Calc{   int i=1;   int add(){     return i++;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 1 i = 2 i = 3 しかし次のように2づつ増やそうとすると、 class Calc{   int i=1;   int add(){     return i+2;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 3 i = 3 i = 3 このようになってしまいます。どこがおかしいのでしょうか?

    • ベストアンサー
    • Java