代码片段如下(就一个JFrame, 上面有两个JTextField, 然后分别给他们加上同一个verifier) MyVerifier verifier = new MyVerifier();
AField.setInputVerifier(verifier);
BField.setInputVerifier(verifier);
class MyVerifier extends InputVerifier {
//A和B只能输入正整数
public boolean verify(JComponent input) {
JTextField text = (JTextField) input;
boolean valid = true;
String str = text.getText();
try {
if (str.equals("") || Integer.parseInt(str) <= 0){
valid = false;
}
} catch (Throwable t){
valid = false;
}
if (!valid){ // 验证失败将提示, 这里出现死循环效果, 不知道怎么回事
JOptionPane.showMessageDialog(text, "invalid.", "Note",
JOptionPane.ERROR_MESSAGE);
}
return valid;
}
}当两个Field都不输入时,焦点从第一个Field转移到第二个Field时出现内存溢出, 错误原因是Dialog一直创建. 请问是什么原因导致的.从第二个到第一个没有问题,出现提示,确定就可以了.(下星期一结帖. 只要给出有理的答复都可以给分,正确的给大头)
AField.setInputVerifier(verifier);
BField.setInputVerifier(verifier);
class MyVerifier extends InputVerifier {
//A和B只能输入正整数
public boolean verify(JComponent input) {
JTextField text = (JTextField) input;
boolean valid = true;
String str = text.getText();
try {
if (str.equals("") || Integer.parseInt(str) <= 0){
valid = false;
}
} catch (Throwable t){
valid = false;
}
if (!valid){ // 验证失败将提示, 这里出现死循环效果, 不知道怎么回事
JOptionPane.showMessageDialog(text, "invalid.", "Note",
JOptionPane.ERROR_MESSAGE);
}
return valid;
}
}当两个Field都不输入时,焦点从第一个Field转移到第二个Field时出现内存溢出, 错误原因是Dialog一直创建. 请问是什么原因导致的.从第二个到第一个没有问题,出现提示,确定就可以了.(下星期一结帖. 只要给出有理的答复都可以给分,正确的给大头)
解决方案 »
- hibernate 关于 annotation 问题
- 关于System.out.println()
- JComboBox
- 无法用printf,请大家调试下这个小程序。
- 我的华为面试
- 请问大侠们,如何计算程序的执行时间(毫秒级的)!!谢谢了
- !急!立刻给分!Jbuilder7的编辑窗口怎么设置才能显示行号?象ultraedit那样的行号。
- 关于reflect的问题
- JAVA 能在Microsft SQL 2000上开发软件吗?难道JAVA只能用ORACLE?
- JPanel上在“新窗口”中打开IE链接如何实现?
- 如何调用新方法时结束当前方法?
- 为什么Teacher能打印, dexing 就打印不了 希望大家帮帮我
if (!valid){ // 验证失败将提示, 这里出现死循环效果, 不知道怎么回事
JOptionPane.showMessageDialog(text, "invalid.", "Note",
JOptionPane.ERROR_MESSAGE);
}
这个会强制失去焦点。如果是只是 System.out.println("错误信息");的画就不会出现异常。。
死循环应该是在点击对话框的 确定后焦点回到原来的textfield 随后就又会弹出错误信息。一直循环下去。可以试试这样 定义全局变量 boolean flag = true 实现documentlistener 文本变化的时候设置为 true if (!valid && flag){ // 验证失败将提示, 这里出现死循环效果, 不知道怎么回事
flag = false;
JOptionPane.showMessageDialog(text, "invalid.", "Note",
JOptionPane.ERROR_MESSAGE);
}
只是给个建议 你应该换换其他的思路去弹出错误信息。。
InputVerifier verifier = text.getInputVerifier();
text.setInputVerifier(null);
JOptionPane.....
text.setInputVerifier(verifier);
要吗创建一个简单的Dialog, 我想那也可以(你那个版本showMessageDialog里面的按钮可能触发了Field的InputVerifier事件)