2011-12-07 47 views
1

我是一個初學java程序員;現在我正在使用J2SE和NetBeans 6.9.1來編寫應用程序。在java程序中加載屬性

我現在面臨的問題是使用單例類從本地文件系統中衆所周知的位置加載屬性。讓我感到困擾的是,我得到一個錯誤,它聲明瞭一個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

能否請您給我們的錯誤?是否有堆棧跟蹤? –

+1

它最有可能要求嘗試捕獲,因爲當你聲明PhotPropertiesManager()時,它會拋出多個異常。 – Max

+0

@Max你釘了它,Francesc,你需要使用「try ... catch」塊,資源http://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html – ComputerSaysNo

回答

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

「更好,更緊湊」是我的個人追求。 ;)你可以在左邊打勾你喜歡的答案來接受它。 –

0

您需要使用try-catch塊爲了因爲你拋出異常使用你的代碼時,你聲明:

PhotPropertiesManager() 

Java使得你基本上儘量保證你的程序贏得通過讓你「捕捉」你的程序可能遇到的錯誤並相應地處理這些錯誤,不至於崩潰(至少是徹頭徹尾的)。

你的try-catch應該是這個樣子:多蘭基爾託的

try{ 
PhotPropertiesManager(); 
} 
catch(Exception e){ 
whateveryouwanttodo(); 
} 

更多的文檔禮貌, [try-catch]