java - 如何知道我的 Java 程序正在做什么?

标签 java debugging jar compilation speech-to-text

我有我的第一个 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/

相关文章:

java - Spring Boot 中多个项目中的错误处理程序

android - 无法在 Unity 5.3.4 中使用 facebook sdk 和 google play 一起为 android 构建

java - 在 Web 应用程序中嵌入聊天

java - 在PreparedStatement中得到错误的输出

java - 如何通过更改其中的一个特定字段来创建新的 json 字符串?

objective-c - 如何使用 Xcode 4 断点 Action

java - 在另一个组件中绘制外部组件(即属于不同框架的内容 Pane )

python - 如何 pickle 对象?

objective-c - 什么是 ARC 限制,如何删除它们?

java - 使用 ojdbc14.jar 插入 CLOB - JAVA