我目前正在尝试制作类似风险的游戏,当我尝试显示地图(矢量图像)时,我有一个NullPointerException,我完全不明白它是如何解决的。 = / 这是代码:
public class Test1 extends Stage {
private BorderPane root = new BorderPane();
private WebView browser = new WebView();
public Test1(){
this.setTitle("Test1");
this.setScene(new Scene(content()));
}
Parent content(){
WebEngine webEngine = browser.getEngine();
webEngine.load(this.getClass().getResource("../../resources/worldMap.html").toExternalForm());
root.setCenter(browser);
return root;
}
}
和错误:
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at hmi.Test1.content(Test1.java:23)
at hmi.Test1.<init>(Test1.java:18)
at Main.start(Main.java:13)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
... 1 more
Exception running application Main
所以它似乎是由链接“../../resources/worldMap.html”引起的,但它确实导致了文件。我也试过svg文件或url(这一个:https://upload.wikimedia.org/wikipedia/commons/8/80/World_map_-_low_resolution.svg) 我仍然有完全相同的错误。 尽管我在互联网上进行了研究,但这是我坚持的一天,所以我希望你能够帮助我。 谢谢!
答案 0 :(得分:0)
我不能肯定地说粘贴的代码,但我想我可以帮你调试它。您已在其中一条评论中将webEngine.load(this.getClass().getResource("../../resources/worldMap.html").toExternalForm());
标识为错误行。
NPE表示您在该行中使用的某个内容以意外方式为空。您使用带调试器的IDE吗?在该行上设置断点并评估每个子组件。
如果没有,你真的应该尝试一下。我使用intellij并发现它使我更加有效和高效。在此期间, hackiest 最简单的解决方法是使用一堆打印语句
System.out.println("webEngine" + webEngine);
System.out.println("class" + this.getClass());
System.out.println("resource" + this.getClass().getResource("../../resources/worldMap.html"));
System.out.println("loaded" + webEngine.load(this.getClass().getResource("../../resources/worldMap.html"));
其中一个将为null,下一行将抛出一个NPE。这样,您就会知道堆栈中的哪个位置存在问题。请在发现时回复。我猜想使用this.getClass.getResource是错误的,或者您认为相对路径从路径字符串开始的位置是错误的(通常它相对于您的.class路径的写入位置)。
答案 1 :(得分:0)
您是否尝试过使用绝对路径来加载资源?您认为代码执行的位置和实际执行的位置可能不同。
答案 2 :(得分:0)
好的,我终于找到了答案。 我的问题实际上是Class.getResource() returns null
的副本答案是图像必须与我应用“getclass”的类所在的包位于同一目录中,而它位于项目的根目录中。
感谢您的帮助!