代码片段如下(就一个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一直创建. 请问是什么原因导致的.从第二个到第一个没有问题,出现提示,确定就可以了.(下星期一结帖. 只要给出有理的答复都可以给分,正确的给大头)

解决方案 »

  1.   

            
        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);
        }
    只是给个建议  你应该换换其他的思路去弹出错误信息。。
      

  2.   

    可能你的JDK版本有问题.不过要解决你的问题可以如下:
    InputVerifier verifier = text.getInputVerifier();
    text.setInputVerifier(null);
    JOptionPane.....
    text.setInputVerifier(verifier);
    要吗创建一个简单的Dialog, 我想那也可以(你那个版本showMessageDialog里面的按钮可能触发了Field的InputVerifier事件)