Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 瓦丁信息盒_Java_Vaadin_Vaadin7 - Fatal编程技术网

Java 瓦丁信息盒

Java 瓦丁信息盒,java,vaadin,vaadin7,Java,Vaadin,Vaadin7,我正在使用VaadinMessageBox,我遇到的问题是逻辑问题是MessageBox之后的代码会立即运行,不会等待您的MessageBox答案。我试图将代码打包到一个返回布尔值的函数中。但是使用MessageBox()似乎不可能做到这一点,下面是我想做的示例: private boolean Delete(){ return true; } private boolean IsDone(){ MessageBox .createQuestion() .with

我正在使用Vaadin
MessageBox
,我遇到的问题是逻辑问题是
MessageBox
之后的代码会立即运行,不会等待您的
MessageBox
答案。我试图将代码打包到一个返回布尔值的函数中。但是使用
MessageBox()
似乎不可能做到这一点,下面是我想做的示例:

private boolean Delete(){
   return true;
}

private boolean IsDone(){
    MessageBox
    .createQuestion()
    .withCaption("Delete")
    .withMessage("Are you sure?")
    .withYesButton(()-> return Delete()) //here is where i have problem 
    .withNoButton(()-> {})
    .open();
}
我也试过,

    .withYesButton(()-> {return Delete();})
它似乎是这样工作的,但没有
返回true

.withYesButton(()-> {if(Delete){
    return true; //doesn't work!
    System.out.printLn("Works!"); // works :-?
}})

有人知道这种情况或有什么想法吗?

需要用户交互的操作不会“停止”代码执行。您需要组织您的代码,以便它在“是”和“否”按钮的处理程序中继续。因此,请确保您的“流程”停止显示确认框,并在回答“是”或“否”后继续

private void IsDone(){
    MessageBox
    .createQuestion()
    .withCaption("Delete")
    .withMessage("Are you sure?")
    .withYesButton(()-> onUserAnsweredYes())
    .withNoButton(()-> onUserAnsweredNo())
    .open();
}

withYesButton
方法获取一个
Runnable
,当用户按下yes按钮时,该方法将被执行。让我们看一下
Runnable
的实现:

public interface Runnable {
    void run();
}

如您所见,
run
返回
void
,因此不能返回任何值,如
true
。相反,您必须提供用于删除所需内容的代码,如:

MessageBox
.createQuestion()
.withCaption("Delete")
.withMessage("Are you sure?")
.withYesButton(()-> codeToDeleteSomething())
.open();

重复:可能重复@andré-schild这不是同一个问题,我已经读过这个主题,我的问题是我是否可以在这里做些什么。这是一个重复,因为当对话框显示时,你的代码不会停止,它会继续运行。您是否必须将删除代码放在单独的函数中并从事件侦听器调用它。我已经尝试定义一个公共变量,而不是使用return,而是使用If语句并更改该公共变量。然后,我使用了一个while语句,例外的是,如果变量发生了变化,我会暂停一段时间,但这不是一个好方法。