私はWindows 7マシンで作業しています。Javaでコマンドプロンプトを使用する
私は、HaskellのGHCiインタープリタのフロントアプリケーションです。ユーザーがコマンドを入力すると、Runtimeのexec()メソッドを使用してJavaがコマンドを実行し、コマンドプロンプトを使用してGHCiを実行していた場合に表示されるテキストが表示されます。
今、出力を印刷するループに関する問題が発生しています。
ここに私が今いるコードがあります。 「:http://www.haskell.org/ghc/:?に助けをGHCiの、バージョン7.10.3」
public class GHCiTest {
public static Scanner rd, sc;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
System.out.println("Starting... ");
Process p = Runtime.getRuntime().exec("ghci");
PrintStream hugsin = new PrintStream(p.getOutputStream());
InputStream hugsout = p.getInputStream();
sc = new Scanner(hugsout);
rd = new Scanner(System.in);
String rdnextline;
while (true){
while (sc.hasNextLine()){
System.out.println(sc.nextLine());
}
System.out.println("yay");
rdnextline = rd.nextLine();
if (rdnextline == "quit"){break;}
hugsin.println(rdnextline);
hugsin.flush();
}
System.out.println(" ... successful completion.");
}
catch(IOException e) {
e.printStackTrace();
}
}
}
私はプログラムがプリントアウトされるので、GHCiの最初の始動が、動作していることを知っています。しかし、この問題はwhile(sc.hasNextLine())ループのように見えます。これは、コマンドプロンプトの出力を読み込んで何も残らないうちに出力することになっています。ループから抜け出すことはありません。ユーザーの入力を読んでください。プログラムがループの後に入れた "yay"フラグを印刷していないので、私はこれを知っています。
スキャナーの代わりにバッファードリーダーを使用しましたか? – Norsk
'sc.hasNextLine()'はストリーム**の終わりに達するまで待ちます(入力がない場合)...ストリームの終了は、プログラムが終了したときにのみ発生します。 – Codebender
2つの懸念事項:1. GHCiは実際にこのように使用するようには設計されていません。インタラクティブな開発ツールです。インタラクティブなユーザーインターフェイスの詳細に依拠すれば、新しいバージョンが出たときにプログラムが中断する可能性があります。あなたは 'ghc -e'をあなたの目的に使うことができますか? 2. GHCiをウェブに公開するのは、周囲に大きなサンドボックスがある場合を除いて、公開しない方がよいでしょう。完全なGHCiアクセスはフルシェルアクセスに似ています。 – dfeuer