gpt4 book ai didi

java - JOptionPane 取消时抛出错误

转载 作者:行者123 更新时间:2023-12-01 18:13:46 24 4
gpt4 key购买 nike

当前遇到的问题是我弹出消息对话框以提示用户输入字符串。我检查了名称是否为空,如果他们点击“确定”按钮,则可以正常工作,但是如果用户点击取消按钮(无论他们是否在文本框中输入任何内容),那么我会收到以下错误:

java.lang.NullPointerException
at cc.nisc.mapping.mappingadvsearch.ResultsPopupMenu$1.doActionPerformed(ResultsPopupMenu.java:98)
at cc.nisc.gui.action.NiscAction.actionPerformed(NiscAction.java:225)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)

相关代码是:

public final ResultsMenuAction createLayerAction = new ResultsMenuAction("uiCreateLayer") {
@Override
protected void doActionPerformed(ActionEvent e) {

try {
String queryName = JOptionPane.showInputDialog(WinMgr.getInstance().getSelectedNavigator(),
"Enter a name for your exported query layer",
"Enter Query Name",
JOptionPane.QUESTION_MESSAGE);
if (queryName.isEmpty()) {
JOptionPane.showMessageDialog(WinMgr.getInstance().getSelectedNavigator(),
"Please enter a name for your query",
"Empty name",
JOptionPane.WARNING_MESSAGE);
return;
}
....
....

如何检查是否已单击取消按钮以便返回而不是引发错误?

最佳答案

来自 JOptionPane.showInternalInputDialog() 上的 JavaDoc,它由您正在使用的方法调用:

Returns: user's input, or null meaning the user canceled the input

因此 null 将指示输入被取消。

要检查 null 或空输入,您需要首先检查 null,然后检查是否为空,因为对 null 调用 isEmpty() 将导致 NPE。

请记住,|| 是短路 运算符,即它将从左到右计算表达式,并在条件成立时停止。因此 if( queryName == null || queryName.isEmpty() ) 不会抛出 NPE,因为如果 queryName 为 null,则条件为 true 并且 isEmpty( ) 永远不会被调用。

相比之下,单个管道|不是短路运算符,即无论左边是否已经为真,都会评估两个表达式。因此queryName == null | queryName.isEmpty() 可能仍会抛出 NPE。

关于java - JOptionPane 取消时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31005186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com