Прежде чем кто-либо закроет это дубликат этого , пожалуйста, держите лошадей, это немного по-другому :-)
У меня есть класс A, который используется в SwingWorker. Итак, программа выглядит примерно так:
class Task extends SwingWorker {
public Task(ClassLoader loader) {
Thread.currentThread().setContextClassLoader(loader);
}
public List<A> doInBackground() {
A obj = new A();
//do some stuff with A;
return list of A;
}
}
И мой метод, который вызывает эту задачу, выглядит следующим образом:
public void someMethod() throws Exception {
Task task = new Task(Thread.getCurrentThread().getContextClassLoader():
//do something and wait for output
List<A> result = task.get();
for(A obj : result) {
//do something
}
}
Теперь я сделал java -verbose: класс, чтобы посмотреть, как этот класс загружается. Я вижу, что A загружается только один раз при выполнении метода doInBackground (). Но как только управление возвращается к someMethod (), итерация цикла for по списку вызывает исключение ClassCastException !! Это выглядит так:
Исключение в потоке "AWT-EventQueue-0" java.lang.ClassCastException: [Lcom.model.A; не может быть приведен к com.model.A]
Понятия не имею, почему это не работает. Я пытался использовать Class.forName () и предварительно загрузить класс A в someMethod (), прежде чем вызывать SwingWorker, при этом не передавая экземпляр загрузчика классов, один и тот же класс загружался дважды !! После отправки загрузчика классов в качестве параметра, класс загружается только один раз, но отказывается от приведения !!
Нужна помощь! (