2010-10-26 96 views
1

我創建了一個爲我做一些文件解析的類。我使得可以作爲獨立應用程序啓動,從命令行獲取文件名。 現在,我創建了另一個類,需要好好利用一下第一類是幹什麼的,我試圖調用它像這樣的主要方法:className.main(new String [] {「filename.txt」})?

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

Show yo你的代碼,並解釋你對'資源的引用'的含義。 – 2010-10-26 19:19:48

+1

並顯示例外... – extraneon 2010-10-26 19:23:10

+0

如果我們有一些代碼,我們可以看看它。但是你在那裏應該有效。 – 2010-10-26 19:24:25

回答

0

您不應該爲此目的使用main。重構您的舊類並創建一個名爲parse(String path)的新方法。這種新方法應該盡一切努力使所有的工作。

public static void parse(String path) 

通過使公共其他類都可以訪問它,靜態意味着你不需要創建類的實例來使用它。你其他想要使用的第一類類會做

MyFirstClassName.parse("file.txt"); 
+0

是的,它似乎是唯一的東西。不過,我希望能以某種方式重新使用主要方法:(。謝謝。 – hummingBird 2010-10-26 19:31:20

0

我不明白。由於main是你的入口點,我不明白你是如何從外部方法調用它,如果它是程序啓動時調用的第一個東西。只有在兩個不同的類中聲明瞭兩個main方法,並且您從另一個類中調用另一個方法時纔會起作用,注意最後一個是在應用程序啓動時由JVM調用的方法。

在任何情況下,我建議你避免使用main作爲泛型方法的名稱,但它不是關鍵字,但我建議你只是將它重命名爲其他名稱。

+0

這就是我希望實現的目標:class2。主要調用class1.main。但是,由於class1.main期待命令行參數,因此我試圖按照上面的描述來模仿它。對不起,我沒有在第一時間發佈代碼片段。 – hummingBird 2010-10-26 19:28:58

3

我只是在回答有關打印字符串數組的一部分:

System.out.println(args.toString()); 

這將無法正常工作,與Array.toString( )只是返回一個內部表示。您將要使用的輔助方法Arrays.toString(arr)Arrays類:

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]]

+0

謝謝你的seanizer。 – hummingBird 2010-10-26 19:41:06

相關問題