以下内容是我使用的库的深层内容。在2015年,它与Groovy 2.3和2.4的早期版本(可能与Java 6或7)一起使用!在尝试修改Java9 +之前,我想更新到Java 8。
final class DynamicClassLoader extends ClassLoader {
final NodeID originatingNode;
NetChannelOutput requestClassData;
NetChannelInput classDataResponse = NetChannel.net2one();
final Hashtable classes = new Hashtable();
DynamicClassLoader(NodeID originator,NetChannelLocation requestLocation) {
super(ClassLoader.getSystemClassLoader());
this.originatingNode = originator;
this.requestClassData = NetChannel.one2net(requestLocation);
}
...
}
当我尝试从Groovy调用代码时,出现以下错误:
org.codehaus.groovy.tools.RootLoader cannot be cast to jcsp.net2.mobile.DynamicClassLoader
调用此代码的点在以下代码中以**指示的行中给出
public byte[] filterTX(Object obj)
throws IOException
{
ClassLoader loader = obj.getclass().getclassLoader();
byte[] bytes = this.internalFilter.filterTX(obj);
if (loader == ClassLoader.getSystemClassLoader() || loader == null)
{
DynamicClassLoaderMessage message = new DynamicClassLoaderMessage(Node.getInstance().getNodeID(),(NetChannelLocation) ClassManager.in.getLocation(),bytes);
byte[] wrappedData = this.internalFilter.filterTX(message);
return wrappedData;
}
**DynamicClassLoader dcl = (DynamicClassLoader)loader;**
DynamicClassLoaderMessage message = new DynamicClassLoaderMessage(dcl.originatingNode,bytes);
byte[] wrappedData = this.internalFilter.filterTX(message);
return wrappedData;
}
与Groovy社区讨论之后,我发现问题出在Intellij调用Groovy脚本的方式上。该代码可以在eclipse中正常运行。在Intellij中,有必要为我要并行运行的每个脚本创建一个jar工件,然后可以从命令行界面运行它们。我用Java 8对应用程序进行了重新编码,并且没有问题。希望有帮助。