• 締切済み

StringTokenizerについて(エラー)

 java初心者です。この度、突貫工事でjavaのネットワークプログラムを作らねばならず、本などを参考にしながら独学でサーバーとクライアントを作成しています。 クライアントは正常に稼働するようなのですが、サーバーにはStringTokenizerの使い方に問題があるらしく、NullPointerExceptionというエラーが出て受信がうまくできません。(以下、エラーが検出される個所を抜粋) …………… ////runメソッド //クライアント処理スレッドの本体です public void run(){ try{ //logout受信まで繰り返します while(true){ //クライアントからのコマンドを読み取ります String line = in.readLine(); //nameが空の場合にはログインコマンドのみを受け付けます。 if(name == null){ StringTokenizer st= new StringTokenizer(line);////エラー箇所 String cmd = st.nextToken(); if("login".equalsIgnoreCase(cmd)){ name = st.nextToken(); server.loginUser(name);//loginメソッドへ } }else{ //nameが空でない場合はログイン済みなのでコマンドを受け付けます。 StringTokenizer st = new StringTokenizer(line); String cmd=st.nextToken();//コマンドの取り出し if("logout".equalsIgnoreCase(cmd)){ server.logoutUser(name);//logoutメソッドへ break;//logoutの場合にはループを終了します。 } } } ……………… 提出期限が迫っており、また、周囲にjavaの心得がある人がいないので困っています。不勉強で申し訳ありませんが、どなたか回答宜しくお願いします。 追伸:プログラムに関する知識が乏しいので用語の使い方が間違っているかもしれませんがご容赦ください。。。

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

回答No.2

気にするところは#1さんのおっしゃるとおりですが、このことはJavaのAPI仕様にも書いてあります。 http://java.sun.com/javase/ja/6/docs/ja/api/java/util/StringTokenizer.html#StringTokenizer%28java.lang.String%29 プログラムを書くときはこれとにらめっこしながら書くとクラスの使い方やどういう例外が出てくるのかというのがわかって、自己解決できる幅が広がりますよ。 http://java.sun.com/javase/ja/6/docs/ja/api/index.html

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

line が null かどうかは調べなくていいの?

関連するQ&A

  • StringTokenizerについて

    JAVAの勉強をしているのですが、StringTokenizerの役割がよく分かりません。検索サイトを使って色々調べてみたのですが、「トークンを区切る」だとかよく分からない言葉が出てきて全く理解できません。以下はあるデータから項目を抽出するプログラムらしいのですが、参考としてこの例でStringTokenizerがどのような役割を果たしているのか教えて下さい。複雑で説明しにくければStringTokenizerそのものの説明でも十分です。よろしくお願いします。 BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); String line=""; try { int i=0; while ((line = reader.readLine()) != null) { int fcount=1; StringTokenizer st = new StringTokenizer(line); while (st.hasMoreTokens()) { switch (fcount) { case 2: //項目2:被説明変数Y data[i][0]=Integer.parseInt(st.nextToken()); break; case 4: //項目4:説明変数X data[i][1]=Integer.parseInt(st.nextToken()); break; default: // その他の項目 String dummy=st.nextToken(); break; } fcount++; } i++; } NofData=i;

    • ベストアンサー
    • Java
  • readLineとStringTokenizerで一行ずつ計算するプログラムでエラーが出る

    初めに行数があり、次に6つのスペースで区切られた数字を一行ずつ計算していくというプログラムが作りたいのですが、実行後 Exception in thread "main" java.lang.NullPointerException at java.util.StringTokenizer.<init>(StringTokenizer.java:182) at java.util.StringTokenizer.<init>(StringTokenizer.java:219) at example.main(example.java:36) のようなエラーが出てきます。下記がそのプログラムですが、stのコンストラクタがループの中に入っているせいだと思い、ループの外でコンストラクトしようと考えたのですがうまくいかずいきづまってしまいました。 どなたかご教示いただけませんでしょうか。よろしくお願いいたします。 int c=0; String line ; int ln = Integer.parseInt(br.readLine()); for(int i = 0; i < ln; i++) { line=br.readLine(); StringTokenizer st = new StringTokenizer(line); for(j = 0; j <= 5; j++) { c=Integer.parseInt(st.nextToken()); intArray[j]=c; } (計算) }

    • ベストアンサー
    • Java
  • streamで送信されたArrayListを変換したい

    以前ネットワークプログラミングについて質問したものです。 現在もjavaでソケットを使ったネットワークプログラミングを行っています。 現在、クライアントからサーバーに数値を送ってサーバーのArrayListのPOINTに格納しています。 そして、そのPOINTをstreamをつかってクライアントに送ってそのリストをクライアント側のArrayListに格納し、数字を出力しようと思っています。 しかし受け取ったPOINTをクライアント側のArrayListに格納しようとしても型が違う(stringだから)ので、うまく変換したいのですがうまくいきません。 送られてきたものをうまく型変換しクライアントのArrayListに格納する、また送信時にうまくArrayListを送信しクライアントで受信する方法はないでしょうか? サーバー PrintWriter out = new PrintWriter(((Socket) e.nextElement()).getOutputStream()); out.println(POINT); クライアント BufferedReader in; buff = in.readLine(); StringTokenizer st = new StringTokenizer(line); String cmd = st.nextToken(); CLPOINT = cmd; このような形で送信しています。 よい方法があればよろしくお願いします。

    • ベストアンサー
    • Java
  • クラス StringTokenizerのコンストラクタ

    あるCSVファイルから行を読み込んで、以下のように文字列を配列に格納しようとしたのですが、カンマとカンマの間の文字列がNULLの時に、次のカンマにある文字列がずれて格納されてしまいます。 例外処理(if文)で処理を振り分けるなどとして、NULLもきちんと配列におさめるにはどのようにすればよろしいのでしょうか? ・ ・ line = csvfile.readLine(); StringTokenizer analy = StringTokenizer(line,","); String[] moji = new String[analy.countTokens()]; for (int n=0; n<moji.length; n++){ moji[n] = analy.nextToken(); } ・ ・

    • ベストアンサー
    • Java
  • ファイルから複数行のトークンを文字列検索。

    input.txt から "," で区切られた文字列をトークンで分け、 左がパターン、右が検索する文字列になります。 一行の場合は while((line = brInput.readLine())!= null ) { StringTokenizer st = new StringTokenizer(line, ","); if(st.hasMoreTokens()){ pattern = st.nextToken(); text = st.nextToken(); } これでマッチするだけなのですが、複数行の場合はどうでしょうか?

    • ベストアンサー
    • Java
  • private変数を設定(Java)

    いろいろ試したのですが、よく分からないので質問します。 クラスaで private String sName; という属性と、 public void setsName(String sPassedName) { sName = sPassedName; } というメソッドがあり、 別のクラスで、 StringTokenizer st = new StringTokenizer("Test 123"); というのがあった時に、この「Test」をsNameに代入しようとしているのですが、 まず、 a aObject = new a(); と新しいaオブジェクトを作り aObject.setsName(st.nextToken()); とやったのですが、cannot resolve symbolの表示が出ています。 st.nextToken())ってStringだからキャストとかしなくていいと思ったのですが、何がまずいのでしょうか?

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

    ファイルの読み込みをStringTokenizerを使ってやりたいのですが、 使い方がいまいち理解できません。今自分で作っているプログラムでは効率が悪いです。 プログラムの一部を載せるのでアドバイスお願いします。 <プログラム> InputStreamReader fisr = new InputStreamReader(client. getInputStream()); BufferedReader fin = new BufferedReader(fisr); String name = fin.readLine(); System.out.println(name); while(n!=10){ FileInputStream objFis = new FileInputStream("eitango"+rand[n]+".txt"); InputStreamReader objlsr = new InputStreamReader(objFis,"Shift_jis"); BufferedReader objBr = new BufferedReader(objlsr); PrintWriter out = new PrintWriter(client.getOutputStream(),true); //1行ずつファイルを読み込む if (n==0){ out.println("Hello,clientNo:" + number +"\n"); } for(a=0;a!=6;a++){ if(a==5){ String ans = objBr.readLine(); ans2 = ans.length(); System.out.println("ans2 = "+ans2); } if(a!=5){ out.println(objBr.readLine()); } }

    • ベストアンサー
    • Java
  • サーバー上(外部)のテキストの読み込み

    以下のようなtest.txtから二次元配列を読み込むプログラムを 今度はクライアントがapplet上からサーバーのappletプログラムがあるフォルダにあるtest.txtからデータを読み込むようにしたいのですが どうしてもセキュリティ上のエラーが出てしまいます。 画像などはgetImageでうまくいくのですが・・・ BufferedReader reader = null; String strArray[][] = new String[5][2]; String fileName = "test.txt"; int i = 0; int j = 0; try { reader = new BufferedReader ( new FileReader(fileName) ); String line; while ( (line = reader.readLine() ) != null ) { StringTokenizer st = new StringTokenizer (line ); while ( st.hasMoreTokens() ) { strArray[i][j] = st.nextToken(); j++; } j = 0;// 横のindexをリセット i++;// 縦のindexを次に } } catch ( Exception e ) { System.out.println ( e.toString() ); } ---------test.txt(例) 200 200 30 60 301 33 11 66 100 390 自分でも調べていくつもりですが期限があるためもしご存知の方がいましたら是非ご教授よろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaプログラミングの質問です。

    http://questionbox.jp.msn.com/qa1030602.html?StatusCheck=ON に載っている、プログラムを以下のようにQuestionというクラスで実行してみたところ、 import java.io.*; class Question{ public static void main(String Args[]){ BufferedReader reader = null; String strArray[][] = new String[4][4]; String fileName = "foo.txt"; int i = 0; int j = 0; try{ reader = new BufferedReader ( new FileReader(fileName) ); String line; while ( (line = reader.readLine() ) != null ){ StringTokenizer st = new StringTokenizer ( line ); while ( st.hasMoreTokens() ){ strArray[i][j] = st.nextToken(); System.out.print ( strArray[i][j] + " " ); j ++; } j = 0; i ++; System.out.println (""); } } catch ( Exception e ){ System.out.println ( e.toString() ); } } } Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。 StringTokenizer を型に解決できません。 StringTokenizer を型に解決できません。 というエラーが出ます。 このサイトの質問者はうまくいっているようなのですが、私のコンパイラがうまく動いていないのでしょうか? java version "1.6.0_07" を使っていて、Eclipseを用いてコンパイルをしたりしています。 どなたかご指摘をどうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaを用いて,a列,b列の空白数を数えたい.

    javaを使って,a列,b列の空白数を数えるプログラムを教えてください. 自分なりに色々と考えてみましたが全くわかりません… おカぞえ,どうぞよろしくお願いいたします. 初心者のため,具体的に教えていただけるとありがたいです. 以下に途中まで考えたコードを添付いたします. 自分としましては,空白に-9を代入し,後でそれを数えるというような方法を考えました. import java.io.*; import java.util.*; public class PTMain { public static void main(String[] args) { try{ BufferedReader fin = new BufferedReader(new FileReader("test.csv")); String ss ; String a; String b; fin.readLine(); while((ss=fin.readLine())!=null){ StringTokenizer st =new StringTokenizer(ss,","); a = st.nextToken(); b = st.nextToken(); if (a.equals(null)){ a="-9" ; //もし空白があるなら-9を代入したい } if (b.equals(null)){ b="-9" ; } System.out.println("a = " + a); System.out.println("b = " + b); } } } } /* test.csv a,b,c,d 5,6,3, 4,,8,1 ,6,7, 5,7,8,8 9,1,45,1 6,6,, ,1,8,5 5,4,5, */

専門家に質問してみよう