我创建了一个为我做一些文件解析的类。我可以从一个独立的应用程序启动,从命令行获取文件名。 现在我创建了另一个类,需要利用第一个类正在做的事情,我试着像这样调用它的main方法:
className.main(new String[]{"filename.txt"});
然而,似乎事情并没有这么好,因为我得到了一些空指针异常。当我插入system.out.println(args[0])
以查看发生了什么时,我获得了对资源的引用,而不是我期望的字符串。
这是更多代码:
// this is from the class that is reffered as 'new one'
// Cal the maze solver now for out.txt
String[] outFile = new String[]{"out.txt"};
MazeSolver.main(outFile);
// this is part of the MazeSolver main method
public static void main(String[] args) {
if(args.length != 1) {
System.out.println("Usage: java MazeSolver ");
System.exit(0);
}
// this is the part where i tried to debug
System.out.println(args.toString());
// and this is the error message that i got in terminal
// [Ljava.lang.String;@63b9240e <---------------------------------------
//ROWCOUNT: 199
//Exception in thread "main" java.lang.NullPointerException
我是否需要创建另一个方法,执行完全相同的操作,但名称不同?
由于
答案 0 :(得分:3)
我只是回答有关打印字符串数组的部分:
System.out.println(args.toString());
这不起作用,Array.toString()只返回一个内部表示。您将需要使用Arrays
类中的辅助方法Arrays.toString(arr)
:
System.out.println(Arrays.toString(args));
或者,如果您正在处理多维数组,请使用Arrays.deepToString(arr)
:
final Object[][] arr = new Object[3][];
arr[0]=new String[]{"a","b","c"};
arr[1]=new Integer[]{1,2,3,4,5};
arr[2]=new Boolean[]{true,false};
System.out.println(Arrays.deepToString(arr));
输出:
[[a,b,c],[1,2,3,4,5],[true,false]]
答案 1 :(得分:0)
我不明白。由于main
是你的入口点,我不明白你如何从一个外部方法调用它,如果它是程序启动时调用的第一个东西。这只有在两个不同的类中声明了两个main
方法并且从另一个类中调用一个时才会起作用,注意最后一个是JVM在应用程序启动时调用的那个。
在任何情况下,我建议您避免使用main
作为通用方法的名称,它不是关键字,但我建议您将其重命名为其他内容。
答案 2 :(得分:0)
你不应该为此目的使用main。重构旧类并创建一个名为parse(String path)的新方法。这种新方法应该做主要做的事情,以使一切正常。
public static void parse(String path)
通过公开其他类可以访问它,静态意味着您不需要创建类的实例来使用它。你想要使用第一堂课的其他班级会做
MyFirstClassName.parse("file.txt");