gpt4 book ai didi

java - 获取一个类中的所有方法---容易出错

转载 作者:行者123 更新时间:2023-12-01 14:44:23 26 4
gpt4 key购买 nike

我是反射和实践的新手,我从网站上随机下载了一个 Java 项目。我决定找出哪个类有 main 方法,所以我编写了以下代码:

package reflection;
import java.io.IOException;
import java.lang.reflect.*;
import java.nio.file.*;

public class FindMethods {
public static void main(String[] args) throws IOException{
if(args.length==0){
System.out.println("Exiting");
System.exit(1);
}else{
Path p = Paths.get(args[0]);
DirectoryStream<Path> allClassFiles = Files.newDirectoryStream(p, "*.class");
for(Path each : allClassFiles){
// System.out.println(each.getFileName());
try {
findMethods(each.getFileName().toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
}

public static void findMethods(String file) throws ClassNotFoundException{
System.out.println(file);
Class c = Class.forName(file);
Method[] m = c.getDeclaredMethods();
for(Method each : m){
System.out.println(each.toString());
}
}
}

System.out.println(each.getFileName()); 正确返回文件夹中的 .class 文件,但是,它散布着堆栈跟踪ClassNotFoundException

类如下:

Addwindow$1.class
Addwindow$2.class
Addwindow.class
Authorwindow.class
clsConnection.class
clsSettings$1.class
clsSettings.class
Deletewindow$1.class
Deletewindow$2.class
Deletewindow.class
Editwindow$1.class
Editwindow$2.class
Editwindow.class
Emprptwindow$PrintCommand.class
Emprptwindow.class
Helpwindow.class
LoginFrame$1.class
LoginFrame.class
MainMenu$1.class
MainMenu$2.class
MainMenu.class
Payrptwindow.class
printwindow$1.class
printwindow.class
Settingswindow$1.class
Settingswindow.class

我需要对代码进行哪些更改才能从每个类获取方法?

堆栈跟踪:

java.lang.ClassNotFoundException: Settingswindow
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at reflection.FindMethods.findMethods(FindMethods.java:33)
at reflection.FindMethods.main(FindMethods.java:22)

正在讨论的随机项目:

http://projectseminar.org/java-projects/payroll-accounting-system/98/

最佳答案

.class 是文件名的一部分,但不是类名的一部分。您需要在将其传递给 Class.forName 之前将其剥离。

另一个问题是 forName 希望使用句点分隔包,而不是斜杠或文件系统使用的任何目录分隔符。如果所有内容都在默认包中,那么这应该不是问题。

如果仍然不起作用,您应该仔细检查类路径。

关于java - 获取一个类中的所有方法---容易出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15595577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com