我在
此站点上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 将“知道”我输入了一个字母,并且程序能够更改其他字母。