• 締切済み

プログラムからの返答の意味がわかりません..

import java.io.*; public class Teme { public static void main(String [] args) { String [] command = { "C:\\Users\\yuzumodoki\\Desktop\\chunkparser-1.0\\chunkparser-1.0\\parser.exe", "aaaa" }; // 外部プログラムを実行 Runtime runtime = Runtime.getRuntime(); Process process = null; try { process = runtime.exec(command); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } // 外部プログラムの標準出力から読み込み BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); System.out.println(br); try { String line; while((line = br.readLine()) != null) { System.out.println(line); } } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } finally { try { br.close(); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } } } } 上記のプログラムはparser.exeにアクセスし,そのアプリケーションに文字列を送り,処理をしてその結果を取得するというものです. 本来"aaaa"と送ると"(aaaa aaaa)"と返ってくるプログラムなのですが, java.io.BufferedReader@89ae9e と返ってきます.これはなぜだかわかる方いらっしゃいますか?また,aaaa aaaaと本来の値を返すにはどうすればいいかわかる方いらっしゃいませんか.. もしわかる方いらっしゃたら教えて頂けたらすごくうれしいです(つj)

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

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

ANo.2です。 おそらくparser.exeの仕様を誤解しているよ。 とりあえずgetErrorStream()でエラー出力を取得して読んでみ。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

> java.io.BufferedReader@89ae9e は > System.out.println(br); の出力ね。toStringを適切に実装していないオブジェクトをprintlnしたら当然の結果でこれは異常ではない。 それでparser.exeを引数aaaaで呼び出すと標準出力に(aaaa aaaa)を返すというのは間違いないの? 私は、parser.exeは何らかのエラーを標準エラー出力に出していて、標準出力には何も出さないから何も表示されないのだと思うけど。 ちなみにANo.1さんの回答は見当違い。例外が出てればprintStackTraceをしているのだからそれが表示される。何も出ていない以上はこのプログラムで例外は派生していない。

yuzumodoki
質問者

補足

回答本当にありがとうございます. 返信遅くなって本当に申し訳ありません(つj) "aaaa"と入力したら"aaaa aaaa"と出力されるのは確かです. わかりやすい説明ありがとうございます(^^) しかし,打開策が分りません.parser.exeでは無理なんですかね??

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

>java.io.BufferedReader@89ae9e >と返ってきます. いや、返ってきてない。 これは、外部プログラムの標準出力から読み込みの所で例外エラーが出て、 catch(Exception exception) { System.err.println(exception.getMessage()); した結果。つまり、外部プログラムから返された値ではなく、exception.getMessage()の結果が java.io.BufferedReader@89ae9e になってて、それがSystem.err.printlnされている。 まずは、例外エラーの発生原因を取り除くこと。

関連するQ&A

  • java わからない。

    今、卒業研究でJAVAを扱っています。 しかし、思った動作をするプログラムが作れません。 時間もなくなってきたので、okwaveに投稿しました。 お願いします。 パソコンはwindowsです。 プログラムを実行すると, (1)コマンドプロセッサでdirを実行してくれる。 (2)実行した後にファイルにする。 実行するときは[dir > dir.txt]のようにしたいです。 今まで書いてきた例をいかに描きます。 import java.io.*; public class TestExec1 { public static void main(String[] args) { try { String s1 = "dir"; Process process = Runtime.getRuntime().exec(s1); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } どこが間違っているかわかりません。 よろしくお願いします。

  • Runtime.execについての質問

    こんにちは、Makotoと申します。 Runtime.execを使って、ディレクトリを作成する プログラムを作っているのですが、下記のプログラムで ディレクトリは作成されるのですが、コマンドプロンプト画面が 立ち上がったままになってしまいます。閉じようと思い、8行目でexitコマンド を発行してみたのですが、うまくいきませんでした。このウィンドウを閉じる 方法はあるのでしょうか? 1:public class test{ 2:  public static void main(String[] args) throws Exception { 3:    Runtime rt = Runtime.getRuntime(); 4:    Process pr; 5:    try { 6:      Process proc1 = rt.exec("cmd /C start /MIN 7:               mkdir c:\\\poi\\test"); 8:      proc1 = rt.exec("command.com, /, exit"); 9:    } catch (java.io.IOException e) { 10:     System.err.println(e); 11:     System.exit(1); 12:    } 13: 14: } 15:}

    • ベストアンサー
    • Java
  • ファイルの読み込み

    "DataFile"に何行か文字列がはいっており、下のソースでそれをテキストボックスにすべて出力したいのですが、1行しか読まれません。 やり方を教えてください。 String moji = null; FileRead(){   try {     BufferedReader br = new BufferedReader( new FileReader( "DataFile.txt" ) );     while ((moji = br.readLine()) != null){       taList.setText(moji);     }     br.close();   }   catch ( Exception e ) {     System.out.println( e.getMessage() );   } }

    • ベストアンサー
    • Java
  • javaの課題プログラムでどうしてもわかりません。

    以下(senderTest)のプログラムを適切に繰り返すように書き換えたいのですが、どうしてもうまくいきません。while文で自分なりに繰り返した結果は同じ文字を送り続けるというものになってしまいました。 本来は送信して、待機状態になりまた新たに文字を入力したら送信、また待機というようにしたいのですがどうしたらよいでしょうか? どうかよろしくおねがいします。 ******************************** senderTest import java.io.*; import java.net.*; public class senderTest { private InetAddress address; private int port = 13400; private DatagramSocket socket; public senderTest() throws Exception { this.address = InetAddress.getByName("192.168.0.16"); this.socket = new DatagramSocket(); } public void send(String s) throws Exception { byte buffer[]; buffer = s.getBytes("Shift_JIS"); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, this.address, this.port); this.socket.send(packet); } public static void main(String[] args)throws IOException { senderTest sender1; System.out.println("↓送信する文字を入力してください↓"); String name = ("健児>"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String msg = name +br.readLine(); try { sender1 = new senderTest(); sender1.send(msg); System.out.println("『" + msg + "』を送信しました。"); } catch (Exception ex) { System.err.println("Error: " + ex.getMessage()); } } } ********************************

    • ベストアンサー
    • Java
  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • エラーの原因がわかりません

    JAVA初心者ですが、ファイル入力を行うプログラムを実行 すると、エラーが出ますが、そのエラーの原因が まったく見当がつきません。 誰か教えてください。 ------------読み込みデータ(loc.dat) 2 11 1 4 1 5 7 1 3 7 7 2 12 11 1 4 1 11 12 4 1 5 3 1 1 11 13 4 1 5 2 1 -------------プログラム import java.io.*; class ExReader {   public static void main(String[] args) { try { //読み込みファイル指定 FileReader fr = new FileReader("loc.dat"); BufferedReader br = new BufferedReader(fr); //ファイルから1行ずつ読み込む String s; while ((s = br.readLine()) != null) { System.out.println(s); } //読み込みファイルをクローズする br.close(); } catch (Exception e) { System.out.println("err: "+e); System.exit(1); } } } ---------------コンパイル結果 C:\JAVA\sim>javac ExReader.java ExReader.java:7: シンボルを解決できません。 シンボル: コンストラクタ FileReader (java.lang.String) 場所 : FileReader の クラス FileReader fr = new FileReader("loc.dat"); ^ ExReader.java:8: シンボルを解決できません。 シンボル: コンストラクタ BufferedReader (FileReader) 場所 : java.io.BufferedReader の クラス BufferedReader br = new BufferedReader(fr); ^ エラー 2 個

    • ベストアンサー
    • Java
  • TCP関係のjavaプログラム

    TCPでオウム返しをするサーバとクライアントソフトでクライアント側でピリオドだけを入力すると接続を切るプログラムを作っているのですがなかなか思い通りにいきません。 正しいソースコードを教えてください。 クライアント側のソースコード import java.io.*; import java.net.*;   public class echoClient { public static void main(String[] args) { Socket echoSocket = null; DataOutputStream os = null; BufferedReader is = null;   try { echoSocket = new Socket("localhost", 9999); os = new DataOutputStream(echoSocket.getOutputStream()); is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host: localhost"); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: localhost"); }   if (echoSocket != null && os != null && is != null) { try { os.writeBytes("HELLO\n");   String responseLine; if ((responseLine = is.readLine()) != null) { System.out.println("Server: " + responseLine); }   os.close(); is.close(); echoSocket.close(); } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { System.err.println("IOException: " + e); } } } } サーバー側のプログラム import java.io.*; import java.net.*; public class echoServer { public static void main(String args[]) { ServerSocket echoServer = null; String line; BufferedReader is; PrintStream os; Socket clientSocket = null; try { echoServer = new ServerSocket(9999); } catch (IOException e) { System.out.println(e); } try { clientSocket = echoServer.accept(); is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); os = new PrintStream(clientSocket.getOutputStream()); while (true) { line = is.readLine(); os.println(line); } } catch (IOException e) { System.out.println(e); } }

  • BufferedReaderでのエラー

    Javaプログラムを作成しています. 標準入力で入力された文字列を表示し,exitが入力されるまで繰り返すプログラムです. エラーが出ますが,対策方法がわかりません. ソースコード,実行結果,エラーは以下の通りです. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test { /** * @param args */ public static void main(String[] args) { System.out.println("Program starts."); while (true) { String input = null; input = getInputLine(); System.out.println("echo:" + input); if (input.equals("exit")) { break; } } System.out.println("Program exits."); } private static String getInputLine() { String input = null; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); input = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); } } return input; } } Program starts. test echo:test echo:null java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145) at java.io.BufferedInputStream.read(BufferedInputStream.java:308) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at kadai1.Test.getInputLine(Test.java:34) at kadai1.Test.main(Test.java:18) Exception in thread "main" java.lang.NullPointerException at kadai1.Test.main(Test.java:21)

    • ベストアンサー
    • Java
  • 誰か教えてください!

    javaのプログラムですが import java.io.*; import java.util.*; public class Suudoku{ Suudoku(int[] data){ public static void main(String[] args);{ int[] data = new int[81]; if(args.length!=1){ System.err.println("need 1 argument"); System.exit(1); } BufferedReader br; try{ br = new BufferedReader(new FileReader(args[0])); for(int i=0;i<9;i++){ String tmp = br.readLine(); StringTokenizer stn = new StringTokenizer(tmp," ",false); for(int j=0;j<9;j++){ data[i*9+j]=Integer.parseInt(stn.nextToken()); } } }catch(Exception e){ System.err.println(""+e); System.exit(1); } new Suudoku(data); int board[][] = {{ 6, 0, 1, 0, 7, 0, 2, 0, 8 }, { 0, 7, 0, 6, 0, 8, 0, 9, 0 }, { 9, 0, 0, 0, 3, 0, 0, 0, 7 }, { 0, 8, 0, 3, 0, 4, 0, 1, 0 }, { 4, 0, 2, 0, 0, 0, 9, 0, 5 }, { 0, 6, 0, 1, 0, 9, 0, 2, 0 }, { 1, 0, 0, 0, 8, 0, 0, 0, 2 }, { 0, 2, 0, 7, 0, 6, 0, 5, 0 }, { 3, 0, 7, 0, 9, 0, 6, 0, 1 }}; } } } の後はどうようにしたら良いか教えて下さい。

  • javaについて

    このプログラムは文字を入力して、検索をかけてその検索にかかった秒数を表示するものですが、検索数を表示するのにはどうしたらいいでしょうか? import java.io.*; import java.net.*; public class Sample { public static void main(String[] args) { System.out.println("入力してください"); String keyword = getKeyword(); String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=" + keyword, "UTF-8"); double sec = getSearchSec(htmlSrc); if (sec > 0) { System.out.println("検索秒数は" + sec + "秒"); } else { System.out.println("検索結果0件"); } } private static String getKeyword() { String keyword = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); keyword = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } keyword = keyword.replaceAll(" ", "+"); return keyword; } private static String getHTMLSrc(String strURL, String charSet) { StringBuffer sb = new StringBuffer(); HttpURLConnection conn = null; BufferedReader br = null; try { URL url = new URL(strURL); conn = (HttpURLConnection)url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet); br = new BufferedReader(isr); String tmp = ""; while ((tmp = br.readLine()) != null) { sb.append(tmp); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (conn != null) { conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } private static double getSearchSec(String htmlSrc) { double sec = 0; String tmp = htmlSrc.replaceAll("<.+?>| ", ""); tmp = tmp.replaceAll(".*件-", ""); tmp = tmp.replaceAll("秒.*", ""); try { sec = Double.parseDouble(tmp); } catch (NumberFormatException e) { } return sec; } }

専門家に質問してみよう