private void btnOKActionPerformed(java.awt.event.ActionEvent evt)
{
try
{
if(txtStaffID.getText(0, 2).equals("AD"))
{
for(Admin admin:admincontrolpanel.adminList)
{
if(txtUsername.getText().equals("") || txtPassword.getText().equals("") || txtName.getText().equals("") || txtEmail.getText().equals("") || txtContactNumber.getText().equals("") || txtICNumber.getText().equals(""))
{
JOptionPane.showMessageDialog(null, "Please fill in the blank", "ERROR", JOptionPane.ERROR_MESSAGE);
}
else if(txtUsername.getText() != null && txtPassword.getText() != null && txtName.getText() != null && txtEmail.getText() != null && txtContactNumber.getText() != null && txtICNumber.getText() != null)
{
admin.setId(txtStaffID.getText());
admin.setUsername(txtUsername.getText());
admin.setPassword(txtPassword.getText());
admin.setName(txtName.getText());
admin.setEmail(txtEmail.getText());
admin.setContactNumber(txtContactNumber.getText());
admin.setIcNumber(txtICNumber.getText());
Admin newAdmin = new Admin(admin.getId(),admin.getUsername(),admin.getPassword(),admin.getName(),admin.getEmail(),admin.getContactNumber(),admin.getIcNumber());
admincontrolpanel.adminList.remove(admin);
admincontrolpanel.adminList.add(newAdmin);
}
}
JOptionPane.showMessageDialog(null, "Successfully Added!", "Add Staff", JOptionPane.PLAIN_MESSAGE);
dispose();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
在文本文件中获取了这些数据......
AD001|jeff|jeff|jeff|jeff@gmail.com|123456|123456
AD002|admin|admin|admin|admin@gmail.com|123456|123456
当我按下OK按钮到edi ...它向我显示这个ConcurrentModificationException错误....任何人都可以帮我看看它? Admin是类... adminList是arraylist ...
try
{
PrintWriter pw = new PrintWriter("Admin.txt");
for(Admin admin:admincontrolpanel.adminList)
{
pw.println(admin.getId() + "|" + admin.getUsername() + "|" + admin.getPassword() + "|" + admin.getName() + "|" + admin.getEmail() + "|" + admin.getContactNumber() + "|" + admin.getIcNumber());
}
pw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
这是我想从arraylist写入文本文件的代码.... 然后它给了我arraylist中的这种数据...可以编辑它..但删除了第一个数据并添加了一个新数据
AD002|admin|admin|admin|admin@gmail.com|123456|123456
AD002|admin|admin|admin|admin@gmail.com|999|123456
答案 0 :(得分:0)
通过SO快速搜索会很快向您显示可能的解决方案..您可以使用标准循环并循环直到上一个列表的大小,而不是像您一样使用隐式迭代器:
ArrayList<Admin> = admincontrolpanel.adminList;
int adminListSize = adminList.size();
for(int i=0;i<adminListSize;i++) {
Admin admin = adminList.get(i);
或者您可以使用ListIterator
使用迭代器遍历列表并进行修改。
此外,admincontrolpanel
不是一个好的变量名。使用camelCase。
答案 1 :(得分:0)
for(Admin admin:admincontrolpanel.adminList)
通过此循环,您将迭代adminList(ArrayList)
Admin newAdmin = new Admin(admin.getId(),admin.getUsername(),admin.getPassword(),admin.getName(),admin.getEmail(),
admin.getContactNumber(),admin.getIcNumber());
admincontrolpanel.adminList.remove(admin);
admincontrolpanel.adminList.add(newAdmin);
上面的最后两行你要删除并添加这里不允许的ArrayList项,因为你已经迭代了ArrayList。你不能在这里同时迭代和修改ArrayList。这就是你面对Concurrent..exception的原因。
答案 2 :(得分:0)
由于另一个线程内的线程可能会发生此问题。例如,如果您在第一个线程中执行某些代码,那么此线程中有另一个线程。然后就会出现这个问题。