我的java swing应用程序jcomponents赢得了';是否在计算完成后才重新喷漆?
我有一个语音识别系统,这是我的java swing应用程序jcomponents赢得了';是否在计算完成后才重新喷漆?,java,swing,jbutton,imageicon,invokelater,Java,Swing,Jbutton,Imageicon,Invokelater,我有一个语音识别系统,这是监听(按钮)功能 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: jButton1.setIcon( loading_icon ); microphone.startRecording() j
监听(按钮)
功能
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jButton1.setIcon( loading_icon );
microphone.startRecording()
jButton1.setIcon( speak_icon );
System.out.println("Start speaking. Press Ctrl-C to quit.\n");
result = recognizer.recognize();
if (result != null) {
String bestfinalnofiller = result.getBestFinalResultNoFiller();
String hypothesis = result.getBestPronunciationResult();
String getresult = result.getBestResultNoFiller();
System.out.println("You said: " + bestfinalnofiller + '\n');
System.out.println("You said: " + hypothesis + '\n');
System.out.println("You said: " + getresult + '\n');
} else {
}
}
我的结果如下:
按钮图标保持不变,并在工作完成后更改
系统在工作进行时打印字符串“开始说话…”
recognizer.recognize()
函数:
public Result recognize(String referenceText) throws IllegalStateException {
Result result = null;
checkState(State.READY);
try {
setState(State.RECOGNIZING);
result = decoder.decode(referenceText);
} finally {
setState(State.READY);
}
return result;
}
我试图补充:
SwingUtilities.invokeLater
但是不起作用,请帮助我,我想在计算时更改按钮的图标图像…很可能是
识别器。recognize()
是一种阻塞方法,即在完成之前,它不会返回
这意味着,在该方法返回之前,您将阻止事件调度线程,该线程负责处理绘制请求
这意味着,在方法返回之前,无法绘制或更新(或响应)任何内容
一个简单的解决方案是使用SwinWorker
,它允许您设置后台进程以执行阻塞调用,但也提供了许多方法通过EDT同步UI的任何更新
仔细看一看,了解更多细节但是为什么swing fix不在转到另一行之前绘制未绘制的图形,除了“SwingWorker”之外,还有什么解决方案吗。谢谢again@malekh因为Swing是一个单线程框架,就像大多数GUI框架一样
actionPerformed
在EDT的上下文中被调用,这意味着在该方法存在之前,它无法处理下一系列事件(包括绘制事件)。这就是它的工作方式。如果在编辑上下文中调用“actionPerformed”,是否仍可以使用“鼠标单击”功能或“发布时”功能。不,所有事件都是在事件调度线程的上下文中传递的…这就是重点。这确保事件以适当的顺序处理,并且不考虑潜在的争用条件或其他线程问题。最好的选择,仍然是SwingWorker
是的,你打赌是真的,我尝试了所有可能的方法,但都没有成功,但有了“SwingWorker”,问题就解决了!