所以说我有两个应用程序。第一个应用程序包含一个文件,并显示以下代码:
public class Ball{
public static void main(String[] args){
System.out.println("You have found the ball");
}
}
第二个应用程序还包含一个文件:
import java.lang.reflect.Method;
public class Human{
private static Method[] methods = null;
public static void main(String[] args){
try{
Class ball = Class.forName("sports.soccer.Ball"); // Error occurs here
methods = ball.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
methods[i].setAccessible(true);
}
//ball.main(); //This also doesn't work but I will read more on how to do this.
}
catch(Exception e){
e.printStackTrace();
}
}
}
在Human.class所在的位置,有一个名为sports的文件夹,其中包含一个名为soccer的文件夹,其中包含第一个应用程序中Ball.class的副本。编译程序运行得很好,但是当我去运行它时会产生以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: sports/soccer/ball (w
rong name: Ball)
//The rest of the error
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:259)
at Human.main(Human.java:8)
Press any key to continue . . .
从查看第一个错误,并进行一些搜索显然它无法找到类文件,但我很困惑为什么它不能。这只是一个包装错误,还是我试图以错误的方式抓住课程?
指向文档的链接我的代码基于: http://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
答案 0 :(得分:0)
执行以下更改并再次运行代码
此外, 类中的main方法是将String Array作为参数。这就是ball.main()没有执行的原因。类的主要方法也是静态方法。我们不想创建一个对象来调用静态方法。
我已经测试了上述步骤并且工作正常。
包sport.soccer;
公共课Ball {
public static void main(String[] args) {
System.out.println("You have found the ball");
}
}
包Man;
import java.lang.reflect.Method;
public class Human {
private static Method[] methods ;
public static void main(String[] args){
try{
Class ball = Class.forName("sport.soccer.Ball");
methods = ball.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
methods[i].setAccessible(true);
}
sport.soccer.Ball.main(new String[]{});
}
catch(Exception e){
e.printStackTrace();
}
}
}
祝你好运!!!