这是我的 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);
到
Button okButton = createButton(parent, SWT.PUSH, "Close Aplot", true);
因为 OK 版本在此行抛出运行时空指针错误
getShell().setVisible(false);
错误大致:
Unhandled event loop exception java.lang.NullPointerException at com.test.BaseDialog$7.widgetSelected(BaseDialog.java:277
问题:
OK
和 SWT.PUSH
之间有什么区别?
为什么 OK 会导致上面的错误?
最佳答案
因为OK
是一个系统按钮ID,指示某些行为。特别是,按OK
按钮将关闭该对话框。同时,您添加了一个按钮选择监听器,也尝试关闭对话框。可以理解,这会失败。
但是,您在这里所做的是创建一个不是系统默认按钮并且没有关联的默认行为的按钮。但是您混淆了 SWT.PUSH
(样式常量)和按钮 ID。如果您想提供自己的按钮 ID,则需要使用大于 IDialogConstants.CLIENT_ID
的 ID。
您可能想要做的只是让系统为您关闭对话框,完全删除您的选择监听器。如果您想在对话框关闭时执行某些操作(例如清理一些句柄),则只需重写 close()
。
关于java - createButton - SWT.PUSH 与 OK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301413/