【问题标题】:How to Stop Execution of a Method without Closing the GUI?如何在不关闭 GUI 的情况下停止执行方法?
【发布时间】:2020-03-30 23:05:16
【问题描述】:

我正在尝试将 IBM Watson Speech-to-Text API 合并到一个 GUI 项目中。我正在使用他们文档中提供的示例代码(如下所示)来提出转录请求。我将此代码复制到一个方法中并对其进行了一些修改,并且在控制台中得到了没有问题的结果。我正在尝试将转录作为字符串发送到 GUI。问题是程序因 System.out(0) 而关闭。在没有 System.out(0) 的情况下获得结果后,我该怎么做才能停止执行此方法?

SpeechToText speechToText = new SpeechToText(authenticator);
speechToText.setServiceUrl("{url}");

try {
  RecognizeOptions recognizeOptions = new RecognizeOptions.Builder()
    .audio(new FileInputStream("audio-file.flac"))
    .contentType("audio/flac")
    .model("en-US_BroadbandModel")
    .keywords(Arrays.asList("colorado", "tornado", "tornadoes"))
    .keywordsThreshold((float) 0.5)
    .maxAlternatives(3)
    .build();

  BaseRecognizeCallback baseRecognizeCallback =
    new BaseRecognizeCallback() {

      @Override
      public void onTranscription
        (SpeechRecognitionResults speechRecognitionResults) {
          System.out.println(speechRecognitionResults);
      }

      @Override
      public void onDisconnected() {
        System.exit(0);
      }

    };

  speechToText.recognizeUsingWebSocket(recognizeOptions,
    baseRecognizeCallback);
} catch (FileNotFoundException e) {
  e.printStackTrace();
}


【问题讨论】:

  • 只删除 System.exit 方法调用?
  • 我尝试过这样做并且也返回;但是这个方法里面的代码仍然执行,就好像连接没有关闭一样:/

标签: java ibm-watson speech-to-text


【解决方案1】:

您要做的是在转录完成后关闭网络套接字。为此,您需要知道转录何时完成,但即便如此,API 也会封装 Web 套接字。如果您设置inactivityTimeout,那么如果静默时间超过超时时间,则连接将自动关闭。如果您不将其设置为其他值,则默认值为 30 秒。

更多细节在 API 文档 - https://cloud.ibm.com/apidocs/speech-to-text/speech-to-text?code=java#sync

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多