2012-06-19 19 views
2

我試圖通過使用API​​執行Native2Ascii任務。我的代碼看起來就像這樣:Native2Ascii API

public static void main(String[] args) { 
    File sourceDir = new File("c://temp//");   
    File targetDir = new File("c://temp1//"); 
    Native2Ascii n2a = new Native2Ascii(); 
    n2a.setSrc(sourceDir); 
    n2a.setDest(targetDir); 
    n2a.setEncoding("utf8"); 
    n2a.execute(); 
} 

不幸的是我得到的線n2a.execute()以下異常:

java.lang.NullPointerException 
    at org.apache.tools.ant.types.AbstractFileSet.setupDirectoryScanner(AbstractFileSet.java:529) 
    at org.apache.tools.ant.types.AbstractFileSet.getDirectoryScanner(AbstractFileSet.java:492) 
    at org.apache.tools.ant.taskdefs.MatchingTask.getDirectoryScanner(MatchingTask.java:192) 
    at org.apache.tools.ant.taskdefs.optional.Native2Ascii.execute(Native2Ascii.java:239) 
    at Native2AsciiTest.main(Native2AsciiTest.java:27) 
Exception in thread "main" 

有誰知道問題是什麼?

+0

你正在使用的這個可選jar的版本是什麼? – mschonaker

+0

我正在使用apache-ant-1.8.4 – Paul

回答

2

從螞蟻的源代碼,你可以看到發現,該項目是空:

public synchronized void setupDirectoryScanner(FileScanner ds, Project p) { 
    if (isReference()) { 
     getRef(p).setupDirectoryScanner(ds, p); 
     return; 
    } 
    if (ds == null) { 
     throw new IllegalArgumentException("ds cannot be null"); 
    } 
    ds.setBasedir(dir); 

    PatternSet ps = mergePatterns(p); 
    p.log(getDataTypeName() + ": Setup scanner in dir " + dir 
     + " with " + ps, Project.MSG_DEBUG); 

的NullPointerException異常是p.log

所以,你可以試試這個一開始讓過去的NullPointerException異常:

Project project = new Project(); 
n2a.setProject(project); 

然後移動到下一個問題......

1.您的意見跟進

您是否需要在應用程序運行時執行此文件轉換?您可以使用任何一種ant構建(使用native2ascii任務)或JDK的native2ascii CLI將文件「脫機」轉換?

2.添加的tools.jar到classpath中

你需要有tools.jar從JDK上運行時類路徑。這樣,我就能夠運行它。

+0

感謝@sudocode,這個工程,但會帶來uo下一個問題,如你所預測的。因爲這一切似乎都很複雜,也許是一個普遍的問題:我不應該通過API來運行任務嗎?我需要用unicode表示替換特殊字符,並認爲使用native2ascii任務可能是個好主意,但也許我在這裏是錯誤的... – Paul

+0

我需要在運行時執行此操作 – Paul

+0

看起來好像你現在所缺的是'tools.jar'。 – sudocode