当我运行下面的程序时(在NETBEANS 6.1.0中),我得到一个' java.lang.NullPointerException'在第21行和第49行。我是一个java新手,请帮助修复错误。
第21行.database.loadFile(fileToPath(" contextPasquier99.txt"));
第49行。返回java.net.URLDecoder.decode(url.getPath()," UTF-8");
package ca.pfv.spmf.test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import ca.pfv.spmf.algorithms.frequentpatterns.eclat_and_charm.AlgoCharm;
import ca.pfv.spmf.input.transaction_database_list_integers.TransactionDatabase;
import ca.pfv.spmf.patterns.itemset_set_integers_with_tids.Itemsets;
/**
* Example of how to use the CHARM algorithm from the source code.
* @author Philippe Fournier-Viger (Copyright 2009)
*/
public class MainTestCharm_saveToMemory {
public static void main(String [] arg) throws IOException{
// Loading the transaction database
TransactionDatabase database = new TransactionDatabase();
try {
database.loadFile(fileToPath("contextPasquier99.txt"));
} catch (IOException e) {
e.printStackTrace();
}
database.printDatabase();
// Applying the Charm algorithm
AlgoCharm algo = new AlgoCharm();
Itemsets closedItemsets = algo.runAlgorithm(null, database, 100000, 0.4, true);
// NOTE 0: We use "null" as output file path, because in this
// example, we want to save the result to memory instead of
// saving to a file
// NOTE 1: if you use "true" in the line above, CHARM will use
// a triangular matrix for counting support of itemsets of size 2.
// For some datasets it should make the algorithm faster.
// NOTE 2: 1000000 is the hashtable size used by CHARM for
// storing itemsets. Most users don't use this parameter.
// print the statistics
algo.printStats();
// print the frequent itemsets found
closedItemsets.printItemsets(database.size());
}
public static String fileToPath(String filename) throws UnsupportedEncodingException{
URL url = MainTestCharm_saveToMemory.class.getResource(filename);
return java.net.URLDecoder.decode(url.getPath(),"UTF-8");
}
}
我得到以下内容:
Exception in thread "main" java.lang.NullPointerException
at ca.pfv.spmf.test.MainTestCharm_saveToMemory.fileToPath(MainTestCharm_saveToMemory.java:49)
at ca.pfv.spmf.test.MainTestCharm_saveToMemory.main(MainTestCharm_saveToMemory.java:21)
答案 0 :(得分:1)
没有行号,这有点棘手,但是我会出去玩......
MainTestCharm_saveToMemory.class.getResource(filename);
返回什么?
我猜null
,在url.getPath()
答案 1 :(得分:1)
你的.getResource(filename)可能会返回null
。在使用之前,您应该测试url
是否有值;类似的东西:
public static String fileToPath(String filename) throws UnsupportedEncodingException{
URL url = MainTestCharm_saveToMemory.class.getResource(filename);
if (url != null) {
return java.net.URLDecoder.decode(url.getPath(),"UTF-8");
}
System.out.println("file: " + filename + "not found");
System.exit(-1); // or return empty string or null
}
编辑:
要使getResource(filename)
在包外部工作,文件名应以“/”开头;例如:
database.loadFile(fileToPath("/contextPasquier99.txt"));
如果它被称为:
database.loadFile(fileToPath("contextPasquier99.txt"));
它只会查看package ca.pfv.spmf.test
。
答案 2 :(得分:1)
NullPointerExcception的原因位于第48行。
URL url = MainTestCharm_saveToMemory.class.getResource(filename);
当您尝试获取资源的网址时,您获得了方法null
的{{3}}中所述的getResource
。因此,您必须在运行代码之前检查资源是否存在。它将帮助您解决此问题。 BTW不要忘记资源不是位于文件系统任何位置的常规文件。它是位于用于加载类的搜索路径中的文件。
答案 3 :(得分:1)
主要是您的文件" contextPasquier99.txt"存在于某个路径中,但您可能没有使用完整正确的路径指定它。
如果是,请URL url = MainTestCharm_saveToMemory.class.getResource(filename);
返回null,这会将空指针异常传播到行
之下 return java.net.URLDecoder.decode(url.getPath(),"UTF-8");
因为url正在调用它的方法,但似乎url为null。
此异常传播给来电者
database.loadFile(fileToPath("contextPasquier99.txt"));