Java createButton-SWT.PUSH与OK
这是我的Java createButton-SWT.PUSH与OK,java,button,swt,Java,Button,Swt,这是我的createButtonsForButtonsBar方法 protected void createButtonsForButtonBar(Composite parent) { Button okButton = createButton(parent, SWT.PUSH, "Close Aplot", true); okButton.setEnabled(true); okButton.addSelectionListener(new SelectionAdapter()
createButtonsForButtonsBar
方法
protected void createButtonsForButtonBar(Composite parent) {
Button okButton = createButton(parent, SWT.PUSH, "Close Aplot", true);
okButton.setEnabled(true);
okButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewer = null;
getShell().setVisible(false);
}
});
}
我得换衣服
Button okButton = createButton(parent, OK, "Close Aplot", true);
到
因为OK版本在此行抛出运行时空指针错误
getShell().setVisible(false);
错误大致如下:
未处理的事件循环异常java.lang.NullPointerException
在com.test.BaseDialog$7.widgeSelected(BaseDialog.java:277
问题:
OK
和SWT.PUSH
之间有什么区别
为什么“确定”会导致上述错误?因为“确定”是一个指示特定行为的系统按钮ID。特别是,按下“确定”按钮将关闭对话框。同时,您添加了一个按钮选择侦听器,该侦听器也尝试关闭对话框。可以理解,这将失败 但是,您在这里所做的是创建一个不是系统默认按钮且没有关联默认行为的按钮。但是您将
SWT.PUSH
(一个样式常量)与按钮ID混淆。如果您想提供自己的按钮ID,您需要使用大于IDialogConstants.CLIENT\u ID
的ID
在这里,您可能想做的是让系统为您关闭对话框,完全删除您的选择侦听器。如果您想在对话框关闭时执行某些操作,比如清理一些句柄,您只需覆盖
close()
Edward提到的任何东西都是正确的。您应该在该方法中传递按钮ID。但是,org.eclipse.jface.dialogs.Dialog.createButton中的按钮样式已经是SWT.PUSH
样式(复合、int、String、boolean)
。请仔细检查。您还应该调用/overrideorg.eclipse.jface.dialogs.Dialog.okPressed()
处理对话框的关闭操作。希望这也有帮助。通过您的回答,我发现我的问题更多的是设计缺陷。您已经回答了这个问题。我可能需要打开另一个关于最佳做法的问题来隐藏对话框。
getShell().setVisible(false);