- ベストアンサー
Javaで外部ファイルの実行
- Javaで外部ファイルの形態素解析ツールのjumanを実行する方法と、類似ツールのchasenを実行した場合の違いについて説明します。
- Javaで外部ファイルの実行方法について解説します。特に、形態素解析ツールのjumanを実行する方法について詳しく説明します。
- Javaで外部ファイルの形態素解析ツールを実行する際に発生するエラーについて、解決方法を説明します。形態素解析ツールのjumanとchasenの違いについても詳しく解説します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 方法Bでしてみたいんですが、どうやら上手く表示してくれないみたいです。 juman.exeと方法Bで実際に試してみましたが、問題なく実行できてreturns[0]にjuman.exeからの出力が代入されました。
その他の回答 (3)
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
気になってWatchしていましたが、自分の経験を。 基本的には#1さんのマルチスレッド化して標準出力、エラー出力、プロセス終了を非同期化するのが正しい実装だと思います。 以下のページの「読み込みのスレッド化」を参照してください。 http://www.ne.jp/asahi/hishidama/home/tech/java/process.html#h4_NG_after ProcessはホストOSに依存してしまいます。Microsoftもスレッド化を回答しています。 http://support.microsoft.com/kb/326709/ja 気になった点は、 (1)juman.exeは常に標準出力→エラー出力の順に吐き出してくれるか? (2)juman.exeでエラーが発生していませんか?(標準出力:無し、エラー出力:あり、とか?) です。 (1)では無いであれば、WaitFor()でループする、(2)になっているであれば、returns[0]に代入されない、という説明は出来ます。 また、発生した現象は正確に示してください。「上手くいきません。」では良く分かりません。 WaitFor()でループするとかxxxxでyyyyのエラーになるとかをお願いします。
お礼
いろいろ助言と指導をありがとうございました。 なんとか表示することができました。
- salsberry
- ベストアンサー率69% (495/711)
> CommandExec.execCommand(new String[]{"C:\\Program Files\\juman\\juman.exe","<","C:\\Program Files\\juman\\test1.txt"}); execCommand()の引数に"<"を渡していますね。test1.txtの内容をリダイレクトでjuman.exeの標準入力に与えようとしているのだと思いますが、JavaのRuntime.exec()はリダイレクトの解釈をしてくれません。やり方を変える必要があります。 (方法A) リダイレクト("<")を使わずにtest1.txtの内容を読み込ませられるような起動方法がjuman.exeにあればそれを使う。 (方法B) cmd.exeを経由してjuman.exeを起動する。リダイレクトの処理はcmd.exeに任せる。 実際に試してはいませんが、こんな感じで。 CommandExec.execCommand(new String[]{ "cmd.exe", "/c", "C:\\Program Files\\juman\\juman.exe", "<", "C:\\Program Files\\juman\\test1.txt" }); (方法C) Javaプログラムでtest1.txtの内容を読み込み、それをjuman.exeのProcessの標準入力に流し込む。
補足
方法Bでしてみたいんですが、どうやら上手く表示してくれないみたいです。 最初のころと違ってループすることはなくなったんですが・・・。
- root139
- ベストアンサー率60% (488/809)
> 実行させようとしてるのですが上手くいきません。 どのようになるのでしょうか? (エラーで終了する、フリーズする、正しくない結果が出力される、など) もし、フリーズするのでしたら、下記の質問と同様の原因かも知れません。 http://okwave.jp/qa/q6372002.html
補足
chasenの場合は上手く表示してくれるのですが、 jumanを使うと何も表示してくれないんです。 特にエラー表示が出るわけでもありませんでした。
お礼
引数の部分をいじったらなんとかできました。 何回もお手数をかけました。 ありがとうございました。
補足
そうなんですか。 自分のほうではデバックをしてみると上手くreturns[0]に代入されてないみたいなんです。 何か原因があるのでしょうか? ちなみにソースは私が貼り付けたものを使用されてますよね?