Witam.
Mam problem z prezentowanym kodem.
Jeo zadaniem jest odświeżać dane w tabeli do której podpięta jest personList.
Kiedy dokonuje zmniejszenia ilości pól poprzez
data = personQuery.getResultList().subList(Integer.parseInt(jtextOd.getText()) , Integer.parseInt(jtextDo.getText()));
Działa bez problemu i pojawia się mniejsza ilość elementów.
Jednak jeżeli zwiększę ilość rekordów w tabeli to po wywołaniu tego kodu otrzymuje błąd:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 27, Size: 27
.......
generowany przez linię : personList.addAll(data);
jak poprawić ten kod aby działał?
Pozdrawiam
Marian
@Action
public Task refresh() {
return new RefreshTask(getApplication());
}
private class RefreshTask extends Task {
RefreshTask(org.jdesktop.application.Application app) {
super(app);
}
@SuppressWarnings("unchecked")
@Override protected Void doInBackground() {
try {
java.util.List<agencjapodrozy.Person> data;
personQuery = travelPUEntityManager.createQuery("SELECT p FROM Person p where p.name LIKE '%"+jtextName.getText()+"%'" );
System.out.println(personQuery.getResultList().size());
if ((jtextOd.getText().trim().length()<1) || (jtextDo.getText().trim().length()<1)){
data = personQuery.getResultList();
} else {
data = personQuery.getResultList().subList(Integer.parseInt(jtextOd.getText()) , Integer.parseInt(jtextDo.getText()));
}
for (Object entity : data) {
travelPUEntityManager.refresh(entity);
}
Thread.sleep(1300L); // remove for real app
setProgress(4, 0, 4);
Thread.sleep(150L); // remove for real app
// personList = personQuery.getResultList();
personList.clear();
personList.addAll(data);
} catch(Exception ex) {System.out.println(ex); }
return null;
}
}