运行Jar

通过IntelliJ运行JavaFX应用程序时,一切都很好。加载了自定义Log4j2附加程序,并且正确解析了所有FXML。但是,当使用Maven将应用程序打包为JAR时,找不到附加程序。为了解决这个问题,日志配置XML中包含一个packages="MyApp.util"属性,它指向自定义附加程序的程序包。添加此属性后,应用程序会以XMLStreamException: ParseError开始引用FXML文件中的任意行而崩溃。

此外,无论是否包含软件包属性,运行Jar时(在Intellij中为null null),log4j2的版本都显示为Apache Log4j Core 2.12.1
2019-11-05 10:24:38,666 JavaFX Application Thread DEBUG null null initializing configuration XmlConfiguration[location=/home/me/config/logging.xml]

我已经确保Log4j API +核心实现都与Jar文件打包在一起。 Jar中包含一个基于Log4j 1.x的内部公司库,但是我不确定这是否会引起冲突。

Log4j2 XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" packages="MyApp.util">
    <Appenders>
        <Console name="Console" target="SYSTEM_ERR">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
        </Console>
        <FXAppender name="JavaFXLogger">
            <PatternLayout pattern="%d{HH:mm:ss}   %msg%n"/>
            <ThresholdFilter level="warn"/>
        </FXAppender>
    </Appenders>
    <Loggers>
        <Logger name="MyApp.data.Acquisitioner" level="info"/>
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="JavaFXLogger"/>
        </Root>
    </Loggers>
</Configuration>

堆栈跟踪:

10:24:38.931 DEBUG BoosterADTM.util.Configurationmanager - Loaded configuration from /home/me/config/config.xml
javafx.fxml.LoadException: 
file:/home/me/MyApp.jar!/MyApp/views/TuneMeter.fxml:262

        at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2543)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
        at company.fx.ViewLoader.<init>(ViewLoader.java:34)
        at company.fx.ViewLoader.<init>(ViewLoader.java:23)
        at MyApp.controller.MainTabsController.initViews(MainTabsController.java:79)
        at MyApp.controller.MainTabsController.initialize(MainTabsController.java:57)
        at sun.reflect.NativeMethodaccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodaccessorImpl.invoke(NativeMethodaccessorImpl.java:62)
        at sun.reflect.DelegatingMethodaccessorImpl.invoke(DelegatingMethodaccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
        at sun.reflect.GeneratedMethodaccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodaccessorImpl.invoke(DelegatingMethodaccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
        at company.fx.ViewLoader.<init>(ViewLoader.java:34)
        at company.fx.ViewLoader.<init>(ViewLoader.java:23)
        at MyApp.Main.start(Main.java:27)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$419(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$399(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$397(PlatformImpl.java:295)
        at java.security.accessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$398(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
        at com.sun.glass.ui.gtk.GtkApplication.lambda$null$203(GtkApplication.java:139)
        at java.lang.Thread.run(Thread.java:748)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[262,49]
Message: Stream closed
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:599)
        at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2513)
        ... 30 more

tracyjuice 回答:运行Jar

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3158088.html

大家都在问