Загрузка свойств в Java-программе - PullRequest
1 голос
/ 07 декабря 2011

Я начинающий Java-программист;теперь я использую J2SE и NetBeans 6.9.1 для кодирования приложения.

Проблема, с которой я сейчас сталкиваюсь, заключается в загрузке свойств из хорошо известного местоположения в моей локальной файловой системе с использованием класса singleton.Что меня раздражает, так это то, что я получаю сообщение об ошибке для условия 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();

    }
}

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Вам нужно использовать блок try-catch для того, чтобы использовать ваш код, потому что вы вызываете исключения, когда объявляете:

PhotPropertiesManager()

Java заставляет вас в основном пытаться гарантировать, что ваша программа не будетаварийно завершить работу (по крайней мере, сразу), заставив вас «перехватить» ошибки, с которыми может столкнуться ваша программа, и затем соответствующим образом устранить эти ошибки.

Ваш try-catch должен выглядеть примерно так:

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

Дополнительные документы предоставлены Дорином, [try-catch]

0 голосов
/ 07 декабря 2011

Проблема в том, что статическое поле не может вызвать исключение проверки.Я бы упростил код как этот.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...