我是一名初学java程序员;现在我正在使用J2SE和NetBeans 6.9.1来编写应用程序。
我现在面临的问题是使用单例类从本地文件系统中的一个众所周知的位置加载属性。让我烦恼的是,我得到了一个错误,它声明了一个throws子句或者捕获了初始化INSTANCE变量的异常。愿任何人帮我解决这个问题。
提前致谢。
代码如下:
package cat.oai.atapplications.phot;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
/**
*
* @author fdalmau
*/
public class PhotPropertiesManager {
private static Properties photProperties;
private PhotPropertiesManager() throws FileNotFoundException, IOException {
photProperties = LoadProperties();
}
public static PhotPropertiesManager getInstance() {
return PhotPropertiesManagerHolder.INSTANCE;
}
public static Properties getPhotProperties() {
return PhotPropertiesManager.photProperties;
}
private static Properties LoadProperties() throws FileNotFoundException,
IOException {
Properties defaultPhotProperties = new Properties();
FileInputStream in = new FileInputStream("defaultphot");
defaultPhotProperties.load(in);
in.close();
Properties applicationPhotProperties =
new Properties(defaultPhotProperties);
in = new FileInputStream("lastexecutionphot");
applicationPhotProperties.load(in);
in.close();
return applicationPhotProperties;
}
private static class PhotPropertiesManagerHolder {
/******
The problem is is this line of code:
******/
static final PhotPropertiesManager INSTANCE = new PhotPropertiesManager();
}
}
答案 0 :(得分:0)
问题是静态字段不能抛出检查异常。我会像这样简化代码。
public enum PhotPropertiesManager {;
private static final Properties PHOT_PROPERTIES = new Properties();
static {
try {
load("defaultphot");
load("lastexecutionphot");
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
private static void load(String filename) throws IOException {
FileInputStream in = new FileInputStream(filename);
PHOT_PROPERTIES.load(in);
in.close();
}
public static Properties getPhotProperties() {
return PHOT_PROPERTIES;
}
}
答案 1 :(得分:0)
您需要使用try-catch块来使用您的代码,因为您在声明时抛出异常:
PhotPropertiesManager()
Java让你基本上尝试通过让你“抓住”你的程序可能遇到的错误然后相应地处理这些错误来确保你的程序不会崩溃(至少是直接的)。
您的try-catch应该类似于:
try{
PhotPropertiesManager();
}
catch(Exception e){
whateveryouwanttodo();
}
更多文档由Dorin提供, [try-catch]