我有我的第一个 Java 小程序:
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.SpeechResult;
import edu.cmu.sphinx.api.LiveSpeechRecognizer;
public class Sphinx {
public static void main(String[] args) throws Exception {
Configuration configuration = new Configuration();
configuration.setAcousticModelPath("models/en-us/en-us");
configuration.setDictionaryPath("models/en-us/cmudict-en-us.dict");
configuration.setLanguageModelPath("models/en-us/en-us.lm.bin");
PrintWriter pw = new PrintWriter(new PrintWriter("status.txt"));
LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
recognizer.startRecognition(true);
pw.print("running");
Thread.sleep(5000);
SpeechResult result = recognizer.getResult();
recognizer.stopRecognition();
pw.print("stopped");
pw.close();
PrintWriter pw2 = new PrintWriter(new PrintWriter("result.txt"));
pw2.println(result);
pw2.close();
}
}
正如您所知,它是一个由 CMU 创建的管理语音到文本引擎的可执行文件。
它将其状态和语音到文本结果输出到两个不同的文本文件中。
现在,令人烦恼的是,我完全不知道我的程序是否在做任何事情。我双击 .jar,对着麦克风说了些什么,但没有任何文本文件发生变化,也没有执行任何操作。
我通过编译器运行了该程序,它说一切都很好。但显然不是,我也无法判断问题出在哪里。
因此,我需要知道方法来判断 Java 程序内部发生了什么以及错误发生在哪里。
编辑:
我也许应该让提出这个问题的人知道发生了什么事。我从来没有得到真正有效的答案,但我最近了解到我使用的语音到文本引擎无论如何都坏了,所以这并不重要。从那时起我就转向了一个新引擎:PyAudio。
最佳答案
默认情况下,PrintWriter 类是缓冲的。只有当缓冲区中有足够的数据时,它才会真正写入文件,以减少操作系统开销。这就是为什么您在文件中看不到任何内容 - 数据将保留在内存中,直到缓冲区已满。
如果您希望数据立即进入文件,您可以在写入文件时调用 PrintWriter 上的 flush
方法;或者当您构造它时,您可以传递 true
作为第二个参数以使其自动刷新。这样,每次打印后它都会冲洗。
但是没有接受 String 和 autoFlush 标志的构造函数,因此您需要编写:
PrintWriter pw = new PrintWriter(new FileOutputStream("status.txt"), true);
(请注意,像在原始代码中那样将 PrintWriter 包装在 PrintWriter 中是没有意义的)。
关于java - 如何知道我的 Java 程序正在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56762561/