Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java显示地图时出现的问题_Java_Svg_Webview - Fatal编程技术网

使用java显示地图时出现的问题

使用java显示地图时出现的问题,java,svg,webview,Java,Svg,Webview,我目前正在尝试做一个类似于风险的游戏,当我试图显示地图(矢量图像)时,我有一个空点异常,我根本不知道如何解决它=/ 代码如下: public class Test1 extends Stage { private BorderPane root = new BorderPane(); private WebView browser = new WebView(); public Test1(){ this.setTitle("Test1");

我目前正在尝试做一个类似于风险的游戏,当我试图显示地图(矢量图像)时,我有一个空点异常,我根本不知道如何解决它=/ 代码如下:

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
应用程序启动方法中出现异常 java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于com.sun.javafx.application.LaunchImpl.launchApplicationWithArgs(LaunchImpl.java:389) 位于com.sun.javafx.application.LaunchImpl.launchApplication(LaunchImpl.java:328) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于sun.launcher.launchelper$FXHelper.main(未知源) 原因:java.lang.RuntimeException:应用程序启动方法中的异常 位于com.sun.javafx.application.LaunchImpl.launchApplication1(LaunchImpl.java:917) 在com.sun.javafx.application.launchempl.lambda$launchApplication$155(launchempl.java:182) 位于java.lang.Thread.run(未知源) 原因:java.lang.NullPointerException 位于hmi.Test1.content(Test1.java:23) 在hmi.Test1.(Test1.java:18) 在Main.start(Main.java:13) 在com.sun.javafx.application.launchempl.lambda$launchApplication1$162(launchempl.java:863) 位于com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 位于com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 位于java.security.AccessController.doPrivileged(本机方法) 位于com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 位于com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:95) 在com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法) 位于com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ... 还有一个 运行主应用程序时出现异常 因此,它似乎是由“../../resources/worldMap.html”链接引起的,但它确实指向该文件。我还尝试使用svg文件或url(这一个:) 我仍然有完全相同的错误。 尽管我在互联网上进行了研究,但这一天我一直坚持着,所以我希望你们能帮助我。
谢谢

我不能从粘贴的代码中确定,但我想我可以帮助您调试它。您已经标识了
webEngine.load(this.getClass().getResource(“../../resources/worldMap.html”).toExternalForm()作为您的注释中的错误行

NPE意味着您在该行中使用的内容之一以意外的方式为null。您是否使用带有调试器的IDE?在该行上设置断点并计算每个子组件

如果没有,你真的应该试试。我使用intellij,发现它让我更加高效。在此期间,解决这个问题最简单的方法是使用一堆打印语句

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路径的写入位置)。

您是否尝试使用绝对路径来加载资源?您认为代码执行的位置和实际执行的位置可能不同。

好的,我终于找到了答案。 我的问题实际上是重复的

答案是图像必须与我应用“getclass”的类所在的包位于同一目录中,而它位于项目的根目录中


谢谢你的帮助

这一切似乎都是由NullPointerException引起的。您是否检查了hmi.Test1.content(Test1.java:23)
?是的,这是一行:webEngine.load(this.getClass().getResource(“../../resources/worldMap.html”).toExternalForm());这就是为什么我推断问题来自链接,但我不知道为什么以及如何解决它。哼。调试?我该怎么做?这对我有帮助吗?如果你不知道什么是调试,你应该尽快学习。这是程序员必备的基本技能。在这里的评论部分,这也不是一件容易教的事情。我要说的是开始阅读教程和练习。不过,对于这里的问题,您是否确保webEngine不为null?getClass返回什么呢?那么getResource呢?还有外型?我真的怀疑它是否与该文件相关,除非它找不到该文件并且默认返回null。有些东西返回null,那么您正试图使用该null。好的,谢谢您的建议。所以我照你说的做了,这是空的资源这是来自.class/.java的路径,我也尝试了“./resources/worldMap.html”和“resources/worldMap.html”和“worldMap.html”,与.svg图像相同,甚至如我所说,还有来自internet的URL(我也尝试了绝对路径),因此我怀疑问题是否来自路径……你的意思是第三个print语句是“resource null”? 你能制作一个文件对象并打印你的cwd吗?我也更熟悉使用.getClass.getClassLoader.GetResourceAsstreamy的人。第三个print语句是。当我创建一个文件时,它被创建在与.project相同的目录中,因此路径应该是“resources/worldMap.html”,但即使使用此路径,资源仍然为空