Не удается заставить System.setProperty() работать в Jar

Я использую этот код:

File jPosFile = new File("JPos.xml");
System.setProperty(JposPropertiesConst.JPOS_POPULATOR_FILE_PROP_NAME, jPosFile.getAbsolutePath()); 

Чтобы настроить мой принтер Pos. Код работает нормально, когда я запускаю его из intellij. Но когда я упаковываю его в банку, я получаю эту ошибку:

jpos/res/jpos.properties file not found
jpos/res/jpos.properties file not found
jpos/res/jpos.properties file not found
jpos.JposException: Service does not exist in loaded JCL registry
        at jpos.loader.simple.SimpleServiceManager.createConnection(SimpleServiceManager.java:179)
        at jpos.loader.JposServiceLoader.findService(JposServiceLoader.java:154)
        at jpos.BaseJposControl.open(BaseJposControl.java:494)
        at ashirwada.pos.Data.FrontEnd.PrinterServiceCom.init(PrinterServiceCom.java:21)
        at ashirwada.pos.Main.init(Main.java:124)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)

Пробовал и этот подход:

 System.setProperty(JposPropertiesConst.JPOS_POPULATOR_FILE_PROP_NAME, Main.class.getResource("/JPos.xml").getFile());

скопировав jpos.xml в папку ресурсов. Все тот же результат. Работает на интеллиг. Не из банки.

Любая помощь могла бы быть полезна.

РЕДАКТИРОВАТЬ:

Вот как я называю файл:

 public static void init() {
        File jPosFile = new File("JPos.xml");
        System.setProperty(JposPropertiesConst.JPOS_POPULATOR_FILE_PROP_NAME, jPosFile.getAbsolutePath()); //todo doesn't work in jar
        try {
            printer.open("POSPrinter");
            printer.claim(1000);
            printer.setDeviceEnabled(true);
            drawer.open("CashDrawer");
            drawer.claim(1000);
            drawer.setDeviceEnabled(true);
            System.out.println("Printer Initialized");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Printer initialization failed");
        }
    }

Файловая структура в IDE

Файловая структура во время выполнения

1 ответ

Когда вы упаковываете вашу программу как jar, тогда нет файла с именем "JPos.xml".

Либо вы должны включить JPos.xml в свой jar-файл и загрузить его как ресурс (используя, например, getClass().getClassLoader().getResource("JPos.xml")) - или вы должны распространять файл JPos.xml отдельно от вашего фляги.

Другие вопросы по тегам