导出的可运行jar无法正常运行,因为java.net.URL.toString为null?

问题描述

我对Java很陌生。我一直在研究程序,最终决定尝试导出并运行它,因此我开始使用launch4j创建jar包装器。每当我尝试通过launch4j或使用.bat文件运行它时,它都不会启动。

在Eclipse中,程序运行完全正常。当我单击launch4j中的测试包装器(使用jdk-15.0.1作为jre)时,我在日志中看到由于java.net.URL.toString()而导致了NullPointerException。

我的程序依赖于Spotify API,并且其中也包含一些Selenium代码。我不太确定是什么导致了这个问题,因为所有代码都可以在Eclipse中正常工作,并且我的代码中没有任何地方尝试获取空URL的字符串。

这是我在日志中看到的错误

java.lang.NullPointerException: Cannot invoke "java.net.URL.toString()" because "url" is null
    at java.desktop/sun.awt.SunToolkit.getimageFromHash(SunToolkit.java:653)
    at java.desktop/sun.awt.SunToolkit.getimage(SunToolkit.java:689)
    at views.view.initComponents(view.java:419)
    at views.view.<init>(view.java:123)
    at views.view$1.run(view.java:95)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventdispatchThread.pumpOneEventForFilters(EventdispatchThread.java:203)
    at java.desktop/java.awt.EventdispatchThread.pumpEventsForFilter(EventdispatchThread.java:124)
    at java.desktop/java.awt.EventdispatchThread.pumpEventsForHierarchy(EventdispatchThread.java:113)
    at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:109)
    at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:101)
    at java.desktop/java.awt.EventdispatchThread.run(EventdispatchThread.java:90)

解决方法

今天同样的事情发生在我身上,就我而言,问题是目录的第一个字母是大写的,而在 Java 中,我把它变成了小写。

当我正确重命名目录时,我再次将其导出并不再收到错误。