Перед тем, как кто-нибудь закроет, это копия этого , пожалуйста, подождите, это немного другое :-)
У меня есть класс A, который используется в SwingWorker. Итак, программа выглядит примерно так:
class Task extends SwingWorker {
public Task(ClassLoader loader) {
Thread.currentThread().setContextClassLoader(loader);
}
public List 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 result = task.get();
for(A obj : result) {
//do something
}
}
Теперь я сделал java -verbose: class, чтобы увидеть, как этот класс загружается. Я вижу, что A загружается только один раз при выполнении метода doInBackground (). Но как только управление возвращается к someMethod (), итерация цикла for по списку вызывает исключение ClassCastException !! Это выглядит следующим образом:
Исключение в потоке «AWT-EventQueue-0» java.lang.ClassCastException: [Lcom.model.A; не может быть преобразован в com.model.A]
Понятия не имею, почему это не работает. Я пробовал использовать Class.forName () и предварительно загрузить класс A в someMethod () перед вызовом SwingWorker, при этом, не передавая экземпляр загрузчика классов, тот же класс загружался дважды !! После отправки загрузчика классов в качестве параметра класс загружается только один раз, но отказывается выполнять приведение !!
Нужна помощь! : (