Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Groovy RootLoader与Java 8 SystemClassLoader集成_Java_Groovy_Classloader - Fatal编程技术网

将Groovy RootLoader与Java 8 SystemClassLoader集成

将Groovy RootLoader与Java 8 SystemClassLoader集成,java,groovy,classloader,Java,Groovy,Classloader,下面是我使用的一个库的深层信息。2015年,Groovy 2.3和2.4的早期版本(可能是Java 6或Java 7)实现了这一点!在尝试修改Java9+之前,我想更新到Java8 final class DynamicClassLoader extends ClassLoader { final NodeID originatingNode; NetChannelOutput requestClassData; NetChannelInput classDataRes

下面是我使用的一个库的深层信息。2015年,Groovy 2.3和2.4的早期版本(可能是Java 6或Java 7)实现了这一点!在尝试修改Java9+之前,我想更新到Java8

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无法强制转换为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,
                (NetChannelLocation) ClassManager.in.getLocation(), bytes);
        byte[] wrappedData = this.internalFilter.filterTX(message);
        return wrappedData;
    }

在与Groovy社区讨论之后,我发现问题在于Intellij调用Groovy脚本的方式。代码在Eclipse中工作没有任何问题。在Intellij中,有必要为我想要并行运行的每个脚本创建一个jar工件,然后可以从命令行界面运行。我用Java8重新编码了这个应用程序,它工作起来没有问题。希望有帮助。

问题是什么?我们应该猜出错误发生的那一行吗?我已经添加了错误发生的那一行的方法,很抱歉在第一个实例中省略了它OK,但答案是显而易见的-变量
loader
包含
RootLoader
,无法转换为
DynamicClassLoader
。你必须调试你的代码。没有足够的信息建议smth