Java 我的类加载器有什么问题?ClassCastException在强制转换到同一类时发生!

Java 我的类加载器有什么问题?ClassCastException在强制转换到同一类时发生!,java,classloader,classcastexception,java-7,Java,Classloader,Classcastexception,Java 7,在任何人关闭之前,这是一个副本,请不要着急,这有点不同:-) 我有一个a级,正在一个SwingWorker中使用。所以,这个程序有点像这样: class Task extends SwingWorker { public Task(ClassLoader loader) { Thread.currentThread().setContextClassLoader(loader); } public List<A> doInBac

在任何人关闭之前,这是一个副本,请不要着急,这有点不同:-)

我有一个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;
      }
}
类任务扩展SwingWorker{
公共任务(类加载器){
Thread.currentThread().setContextClassLoader(加载器);
}
公共列表doInBackground(){
A obj=新的A();
//用手指做一些事情;
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
      }
}
public void someMethod()引发异常{
任务任务=新任务(Thread.getCurrentThread().getContextClassLoader():
//做点什么,然后等待输出
列表结果=task.get();
对于(目标:结果){
//做点什么
}
}
现在,我做了一个java-verbose:class来查看这个类是如何加载的。我可以看到,在执行doInBackground()方法时,只加载了一次。但是,一旦控件返回到someMethod(),列表上的for循环迭代就会抛出一个ClassCastException!!它是这样的:

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;
      }
}
线程“AWT-EventQueue-0”java.lang.ClassCastException中出现异常:[Lcom.model.A;无法转换为com.model.A]

我不知道为什么这不起作用。我尝试使用Class.forName()并在someMethod()中预加载类A,在调用SwingWorker之前,在不传递classloader实例的情况下执行此操作时,同一个类被加载了两次!!在将classloader作为param发送后,该类仅被精确加载一次,但拒绝强制转换

需要帮助!:(

您正在尝试将
com.model.A[]
实例强制转换为
com.model.A
实例


您正在尝试将
com.model.A[]
实例强制转换为
com.model.A
实例。

我认为系统正在抱怨将数组强制转换为类 *L*com.model.A;无法强制转换为 com.model.A


请在调试模式下运行程序,查看是否使用数组代替对象。

我认为系统正在抱怨将数组强制转换为类 *L*com.model.A;无法强制转换为 com.model.A


请在调试模式下运行程序,看看是否使用数组来代替对象。

为了清楚起见,sysout打印的数组在类名前面有一个前导的
L
。该死…我不知道-可能是我知道了,但我太盲目了,在这里看不到它。为了清楚起见,sysout打印的数组前面有一个前导的
L
在全班同学面前a领先L!该死…我不知道-可能是我知道,但我太瞎了,看不见这里。我不敢相信我为这么愚蠢的事情浪费了5个多小时尝试所有事情!!我不敢相信我为这么愚蠢的事浪费了5个多小时尝试所有事情!!