className.main(new String [] {“filename.txt”})?

时间:2010-10-26 19:18:02

标签: java

我创建了一个为我做一些文件解析的类。我可以从一个独立的应用程序启动,从命令行获取文件名。 现在我创建了另一个类,需要利用第一个类正在做的事情,我试着像这样调用它的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


我是否需要创建另一个方法,执行完全相同的操作,但名称不同?

由于

3 个答案:

答案 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");