Создание FileHandler дает NoSuchFileException причину отсутствия .lck - PullRequest
0 голосов
/ 10 июля 2020

я ищу 2 часа для решения этой проблемы:

Я пытаюсь добавить FileHandler к Logger в JAR. Каталог журналов находится снаружи.

В моей среде IDE (NetBeans) это работает:

public static void addFileHandler(Logger logger) {
        try {
            Path p = Paths.get("logs", logger.getName().substring(logger.getName().lastIndexOf('.') + 1) + ".log");
            FileHandler fh = new FileHandler(p.toString(), false);
            fh.setFormatter(sf);
            fh.setLevel(Level.ALL);
            fh.setEncoding("UTF-8");
            logger.addHandler(fh);
            if (errorHandler != null) {
                logger.addHandler(errorHandler);
            }
            if (allHandler != null) {
                logger.addHandler(allHandler);
            }
        } catch (IOException | SecurityException ex) {
            LOG.log(Level.SEVERE, getString("ERROR WHILE ADDING FILEHANDLER TO LOGGER") + " " + logger.getName(), ex);
            return;
        }
        LOG.log(Level.INFO, getString("LOGGER {0} GOT ADDED HIS FILEHANDLERS SUCCESSFULLY") + "!", logger.getName());
    }

Но в моем Jar я продолжаю получать это для каждого регистратора:

Juli 10, 2020 2:36:48 PM de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging addFileHandler
SEVERE: Fehler beim Hinzufügen vom FileHandler zum Logger de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Formatting
java.nio.file.NoSuchFileException: logs\Formatting.log.lck
        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.newFileChannel(WindowsFileSystemProvider.java:120)
        at java.base/java.nio.channels.FileChannel.open(FileChannel.java:292)
        at java.base/java.nio.channels.FileChannel.open(FileChannel.java:345)
        at java.logging/java.util.logging.FileHandler.openFiles(FileHandler.java:511)
        at java.logging/java.util.logging.FileHandler.<init>(FileHandler.java:341)
        at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging.addFileHandler(Logging.java:58)
        at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Formatting.<clinit>(Formatting.java:39)
        at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.Constants.<clinit>(Constants.java:34)
        at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging.<clinit>(Logging.java:40)
        at de.dhbw.mosbach.inf19b.programmieren2.game.main.StartJar.<clinit>(StartJar.java:21)

Конечно .lck не существует, обработчик создается прямо сейчас ...

Та же ошибка, если я использую p.normalize().toAbsolutPath(). Я не могу использовать Stream, потому что это создание FileHandler ... Как упоминалось в любом решении я нашел ...

Почему это происходит? Как этого избежать?

1 Ответ

0 голосов
/ 11 июля 2020

Ну ... Спасибо, VGR ...

Я только что добавил это прямо перед инициализацией FileHandler ... теперь он работает каждый раз ... FileHandler, а не IDE.

if (!Files.exists(p.getParent())) {
            Files.createDirectory(p.getParent());
}
...