在任何人关闭之前这是this的副本,请抓住你的马,这有点不同:-)
我有一个正在SwingWorker中使用的A类。所以,该程序看起来像这样:
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:class,看看这个类是如何加载的。我可以看到A在执行doInBackground()方法时只加载一次。但是,一旦控制返回someMethod(),列表上的for循环迭代就会引发ClassCastException !!它是这样的:
线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:[Lcom.model.A;无法转换为com.model.A]
我不知道为什么这不起作用。我尝试使用Class.forName()并在someMethod()中预加载类A,然后调用SwingWorker,而在不传递类加载器实例的情况下执行此操作,同一个类被加载两次!在将类加载器作为param发送之后,类只能精确加载一次,但拒绝强制转换!!
需要帮助! :(
答案 0 :(得分:4)
[Lcom.model.A; cannot be cast to com.model.A]
^^
您正在尝试将com.model.A[]
实例强制转换为com.model.A
实例。
答案 1 :(得分:2)
我认为系统抱怨数组被转换为类 * → * com.model.A;无法施展 com.model.A
请以调试模式运行程序&amp;看看你是否得到一个数组来代替一个对象。