Java Swing—在前一个方法完成之前停止方法的执行
我正在用Swing编写GUI程序,在一个类中有以下两种方法:Java Swing—在前一个方法完成之前停止方法的执行,java,swing,timer,synchronized,thread-sleep,Java,Swing,Timer,Synchronized,Thread Sleep,我正在用Swing编写GUI程序,在一个类中有以下两种方法: private void addMessageToLog(MessageType type, String message) { if ((type.equals(MessageType.DELAYED_ERROR)) || (type.equals(MessageType.DELAYED_INFO)) || (type.equals(MessageType.DELAYED_SUCCESS))) { Timer
private void addMessageToLog(MessageType type, String message) {
if ((type.equals(MessageType.DELAYED_ERROR)) || (type.equals(MessageType.DELAYED_INFO)) || (type.equals(MessageType.DELAYED_SUCCESS))) {
Timer timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getModelObserver().createMessage(type, message);
}
});
timer.setRepeats(false);
timer.start();
}
else {
getModelObserver().createMessage(type, message);
}
}
private String getCommand(String instruction, String error) {
String command = "";
while (!isValid(command)) {
addMessageToLog(MessageType.INFO, instruction);
command = getModelObserver().getCommand();
checkCommand(command, error);
}
return command;
}
addMessageToLog
如果使用“延迟消息类型”,则可以添加延迟。这很好,但是如果在addMessageToLog
调用之后立即调用getCommand
,那么getCommand
内部的非延迟addMessageToLog
将在先前调用的延迟之前执行
例如:
addMessageToLog(MessageType.DELAYED_INFO, "Delayed message")
getCommand("Not delayed", "Error")
输出:
Not delayed
Delayed message
鉴于我想要:
*0.5 second pause*
Delayed message
Not delayed
有没有办法在addMessageToLog
完成之前保持执行getCommand
我遇到了
synchronized
选项,但我不太了解它,也不确定它是否可以用于此实例。有一种方法称为忙等待
这样实施:
private静态布尔就绪=false代码>
private String getCommand(String instruction, String error) {
[...]
ready = true;
return command;
private String getCommand(String instruction, String error){
while(!ready){sleep(1);} //Busy waiting
[...]
另一种方法是在addMessageToLog方法中调用getCommand。注意Swing是单线程的,并且不是线程安全的,这意味着您不应该出于任何原因(比如调用
thread.sleep
)或从EDT上下文之外更新UI。请查看以了解更多详细信息