我有一个自己创建的对话框,应该检查用户的输入。目前我可以让它验证一个空输入,并在它是一个Integer时正确解析用户输入,但是在使用String进行验证时我会继续得到NumberFormatException。添加try,catch确实阻止了JVM崩溃,但输入为空。
public void initDialog() {
dPanel = new JPanel();
dPanel.setLayout(new BoxLayout(dPanel, BoxLayout.Y_AXIS));
JLabel invalidInput = new JLabel("");
String[] options = {"OK"};
dPanel.add(new JLabel("Game default target is 101, enter a number below to change it"));
dPanel.add(new JLabel("Leave blank to start with the default"));
dPanel.add(invalidInput);
JTextField text = new JTextField("");
text.requestFocusInWindow();
dPanel.add(text);
int changeGameTarget = JOptionPane.showOptionDialog(null, dPanel, "Dice Game", JOptionPane.NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
dialogHandler(changeGameTarget, text, invalidInput);
text.setText("");
}
对话处理方法
public boolean dialogHandler(int op, JTextField text, JLabel nonDigit) {
String s = text.getText();
try {
if (op == JOptionPane.OK_OPTION) {
if (s.isEmpty()) {
target = 101;
} else {
target = Integer.parseInt(s);
}
}
} catch (NumberFormatException ex){
nonDigit.setText("This is not a number");
return false;
}
return true;
}
答案 0 :(得分:1)
让我们在解析中使用 Try-Catch 作为 if-else 并将方法更改为boolean,这样你就可以在主
public boolean dialogHandler(int op, JTextField text, JLabel nonDigit) {
String s = text.getText();
if (op == JOptionPane.OK_OPTION) {
if (s.isEmpty()) {
return false; // If the text is empty we return false for the flag.
} else {
try {
target = Integer.parseInt(s);
return true; // If parse was succesful, we return true for the flag.
} catch (Exception e) {
return false; // If the exception happened, return false for the flag.
}
}
} else if (op == JOptionPane.CLOSED_OPTION) {
System.exit(0);
}
}
然后我们改变主要:
boolean flag;
do {
int changeGameTarget = JOptionPane.showOptionDialog(null, dPanel, "Dice Game", JOptionPane.NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
flag = dialogHandler(changeGameTarget, text, invalidInput);
} while (!flag);
答案 1 :(得分:0)
好的解决问题应该很简单:
首先,将方法签名更改为
public boolean dialogHandler(int op, JTextField text, JLabel nonDigit)
这使您可以返回良好的输入(true
)或坏(false
)。
然后,您只需使用try-catch
块包围您的方法,然后抓住NumberFormatException
。如果捕获到异常,则返回false
,否则返回true
。
然后你只需要在方法的结果为false时写入,用户必须输入其他内容。