Java错误尝试在通知中进行变异

时间:2013-06-14 14:48:43

标签: java error-handling

我收到了错误 我在this site建立的一些代码中Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt to mutate in notification

我创建了GUI并且我创建了一个documentListener,因此程序将知道什么时候放在文本字段中。我在方法handleLetters中收到错误。它应该像链接中的那个一样工作 - 当我输入一个字母时,我想用A代替它,如果有意义的话,它会将替换字母放在所有A的位置上?

我已经厌倦了谷歌搜索,但似乎无法使用我的代码。

public GUI() {

    jp.setLayout(Layout);
    setTitle("Derp");
    System.out.println(size);
    setVisible(true);
    setSize(700, 100);
    setResizable(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    JPanel jp1 = new JPanel();
    jp1.setLayout(new GridLayout(2, 2));
    for (int i = 0; i < size; i++) {
        char temp = SubstitutionCipher.newD.toString().charAt(i);
        JTextField textField = new JTextField();
        textField.setHorizontalAlignment(0);
        if ((int) temp == 0) {

            textField.setBorder(null);
            textField.setEditable(true);
            jp1.add(textField);
            nums.add(textField);
            jp.add(jp1);
        } else {

            SubstitutionCipher.derp[i] = textField.getText();
            jp1.add(textField);
            nums.add(textField);
            jp.add(jp1);
            /* also store textField somewhere else. */
        }
        textField.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void removeUpdate(DocumentEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("remove");

                HandleLetters();

            }

            @Override
            public void insertUpdate(DocumentEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("update");
                HandleLetters();

            }

            @Override
            public void changedUpdate(DocumentEvent arg0) {
                System.out.println("Change");
                HandleLetters();
            }
        });
    }   
}

    jp.add(jb);
    add(jp);
}

public Runnable HandleLetters() {
    char[] charAry = new char[size];
    String[] k = new String[size];
    String[] temp = new String[size];
    int h;
    int cnt = 0;
    for (int i = 0; i < size; i++) {
        charAry[i] = SubstitutionCipher.newD.toString().charAt(i);
        temp[i] = "d";
    }
    for (h = 0; h < charAry.length; h++) {

        k[h] = nums.get(h).getText();

        if (h == size - 1) {
            for (int i = 0; i < k.length; i++) {
                // System.out.println(k[i]);
                if ((k[i] == " ")) {
                    cnt++;
                }
            }
            break;
        }
    }//here i try to change recurring letters to the wished letter
    for (int i = 0; i < charAry.length; i++) {
        System.out.println("cnt: " + charAry[cnt]);
        System.out.println("i: " + charAry[i]);
        if (charAry[cnt] == charAry[(i + 1) % 21]) {
            System.out.println(k[cnt]);
            nums.get(i).setText("" + k[cnt]);
            break;
        }
    }
    return null;
}

public static void main(String[] args) {
    SubstitutionCipher.SubstitutionCipher();
    GUI t = new GUI();
}
}

所以我想知道我可以使用哪些其他听众,这样我的TextField就会“知道”我写了一封信,并且该程序能够更改其他字母。

1 个答案:

答案 0 :(得分:1)

尝试使用Windowbuilder。将使您更容易控制UI。