runtime.getRuntime.exec冻结执行

时间:2016-10-18 14:11:29

标签: java batch-file cmd cmusphinx

我尝试用Java执行.bat文件,为Sphinx 4创建语言模型。

bat文件:

cd plugins
perl tocorpus.pl
text2wfreq < corpus.txt | wfreq2vocab > corpus.vocab
text2idngram -vocab corpus.vocab -idngram corpus.idngram < corpus.txt
idngram2lm -vocab_type 0 -idngram corpus.idngram -vocab corpus.vocab -arpa corpus.lm
sphinx_lm_convert -i corpus.lm -o languagemodel.lm.bin

它使用Sphinx提供的工具包。该过程由以下人员执行:

Process proc = Runtime.getRuntime().exec("plugins/lm-builder.bat"); 

输出在idngram2lm之后停止,就在最后一行之前。通常从命令提示符运行此文件工作正常,一切都将执行,具有正确的结果。

知道在Java中运行时执行被冻结的原因吗?

编辑: CMU工具包在此过程中导出多个文件,并删除它们。因此,查看资源管理器窗口将显示进度。

文本中的输出由以下内容检索:

BufferedReader inStreamReader = new BufferedReader(
                new InputStreamReader(proc.getInputStream())); 

String s= "";
while((s = inStreamReader.readLine()) != null){
    System.out.println(s);
}       

编辑2: 直接在Java中运行代码确实有效。虽然我不认为这个解决方案可以在.bat文件中使用

Process proc = Runtime.getRuntime().exec("cmd.exe /K \"\"plugins/idngram2lm\" -vocab_type 0 -idngram plugins/corpus.idngram -vocab plugins/corpus.vocab -arpa plugins/corpus.lm & exit\"");     

0 个答案:

没有答案