Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
如何使用java类加载器调用带有参数的scala函数?_Java_Scala_Reflection_Urlclassloader - Fatal编程技术网

如何使用java类加载器调用带有参数的scala函数?

如何使用java类加载器调用带有参数的scala函数?,java,scala,reflection,urlclassloader,Java,Scala,Reflection,Urlclassloader,我正在寻找一些将scala jar加载到java类加载器的指南。 当我使用JavaJAR文件时,下面的函数适用于我 其中,arr是java.net.URL的数组,用于我需要加载到类加载器中的所有jar val classLoader = new URLClassLoader(arr, this.getClass().getClassLoader()) val clazz = classLoader.loadClass(className) val myMethod = clazz.getDecl

我正在寻找一些将scala jar加载到java类加载器的指南。 当我使用JavaJAR文件时,下面的函数适用于我

其中,arr是java.net.URL的数组,用于我需要加载到类加载器中的所有jar

val classLoader = new URLClassLoader(arr, this.getClass().getClassLoader())
val clazz = classLoader.loadClass(className)
val myMethod = clazz.getDeclaredMethod(methodName, classOf[String])
myMethod.setAccessible(true)
val response = myMethod.invoke(methodName)
然而,当我试图使用类似的方法从scala jar文件调用scala函数时,我在这一行的val clazz=classLoader.loadClass(className)处得到classNotFound异常

val clazz = classLoader.loadClass("com.testing.Test")
我想调用类测试的print方法。有人能给我引路吗?我在SO中检查了其他几篇文章,但它们涉及的对象和特性可能不适用于我的用例

Scala类,例如:

package com.testing
    class Test(){
      def print (a: String, b: String): String = {
       return a+b
      }
    }

谢谢

这应该和Java类一样有效,因为类加载器应该关心的没有区别,我已经做了很多次了。但一个可能的问题是,如果在
arr
中不包含依赖项;Java和Scala都是如此,但对于Scala,您可能缺少
Scala库-.jar

为寻找类似问题的人发布答案。 Classloader在scala和java中都能正常工作


对于Java,只需在method.invoke中传递方法名称对我来说很有效,而在scala中,我必须专门创建一个类的对象,并将该对象传递给method.invoke。对我来说是一个新的学习。

我认为你的Scala课堂示例是错误的。这是不可能的
(“a:String,“b:String”)
。很抱歉,我已经更新了它。嗨,Alexey,我已经添加了scala-library-2.11.11.jar,这与我的scala项目的版本相同。你能分享一个示例代码吗,这样我就可以看到我缺少的东西了?这是错误消息,我在sun.misc.Launcher$AppClassLoader.loadClass的java.net.URLClassLoader.findClass(URLClassLoader.java:381)的java.lang.ClassLoader.loadClass(ClassLoader.java:424)的sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)的线程“main”java.lang.ClassNotFoundException中收到异常(ClassLoader.java:357)我所有的例子都在大项目中,没有真正的用处。你可以在以下位置看到一个例子:它只是做了
ClassLoader.loadClass
和你的一样。不确定发生了什么,但它现在绕过了我的代码,现在在下一行失败了。val myMethod=clazz.getDeclaredMethod(methodName,classOf[String])线程“main”java.lang.IllegalArgumentException中的.Exception:对象不是声明classIs的实例scala类是否有问题,或者是否需要使用对象?