我试图将信息(lattiude,经度)传递到html webview中的google地图。问题是应用程序不是以netbeans开头的。它返回:
执行 C:\用户\卡洛斯\文档\的NetBeansProjects \ OpenPilot \ DIST \ run1883323097 \ OpenPilot.jar 使用平台C:\ Program Files \ Java \ jdk1.8.0_05 \ jre / bin / java Application start方法中的异常 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:483)at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367) 在 com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:483)at sun.launcher.LauncherHelper $ FXHelper.main(LauncherHelper.java:767) 引起:java.lang.RuntimeException:Application start中的异常 方法 com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894) 在 com.sun.javafx.application.LauncherImpl.access $ 000(LauncherImpl.java:56) 在 com.sun.javafx.application.LauncherImpl $ 1.run(LauncherImpl.java:158) 在java.lang.Thread.run(Thread.java:745)引起: javafx.fxml.LoadException:未知路径
在 javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617) 在javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2595)at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)at at openpilot.OpenPilot.start(OpenPilot.java:29)at com.sun.javafx.application.LauncherImpl $ 8.run(LauncherImpl.java:837) 在 com.sun.javafx.application.PlatformImpl $ 7.run(PlatformImpl.java:335) 在 com.sun.javafx.application.PlatformImpl $ 6 $ 1.run(PlatformImpl.java:301) 在 com.sun.javafx.application.PlatformImpl $ 6 $ 1.run(PlatformImpl.java:298) 在java.security.AccessController.doPrivileged(Native Method)at com.sun.javafx.application.PlatformImpl $ 6.run(PlatformImpl.java:298) 在 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.access $ 300(WinApplication.java:39) 在 com.sun.glass.ui.win.WinApplication $ 4 $ 1.run(WinApplication.java:112) ... 1更多引起:netscape.javascript.JSException:TypeError: '未定义'不是一个功能 com.sun.webkit.dom.JSObject.fwkMakeException(JSObject.java:128)at at com.sun.webkit.WebPage.twkExecuteScript(Native Method)at com.sun.webkit.WebPage.executeScript(WebPage.java:1410)at javafx.scene.web.WebEngine.executeScript(WebEngine.java:934)at openpilot.FXMLDocumentController.initialize(FXMLDocumentController.java:74) 在javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)... 13更多 异常运行应用程序openpilot.OpenPilot Java结果:1
这里是代码:
public class FXMLDocumentController implements Initializable {
@FXML public WebView Map;
@Override
public void initialize(URL url, ResourceBundle rb) {
URL MapURL = getClass().getResource("map.html");
WebEngine WebEngine = Map.getEngine();
WebEngine.load(MapURL.toExternalForm());
String test = "40.3130432088809";
WebEngine.executeScript("getCoordinates('40.3130432088809')");
}
}
这里是带地图的html:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
var latitude;
var longitude;
function getCoordinates(latitude){
this.latitude = latitude;
}
var map;
function initialize() {
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(latitude, -2.900390625)
};
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
google.maps.event.addListener(map, 'click', function(event) {
placeMarker(event.latLng);
});
}
function placeMarker(location) {
var marker = new google.maps.Marker({
position: location,
map: map
});
google.maps.event.addListener(marker, 'rightclick', function() {
deleteMarker(marker);
});
}
function deleteMarker(marker) {
marker.setMap(null);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
答案 0 :(得分:1)
您几乎肯定会在页面加载之前尝试执行javascript。您需要指定一个处理程序,以便在Web引擎完成加载时执行脚本。
@Override
public void initialize(URL url, ResourceBundle rb) {
URL MapURL = getClass().getResource("map.html");
WebEngine WebEngine = Map.getEngine();
WebEngine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> {
if (newState == State.SUCCEEDED) {
WebEngine.executeScript("getCoordinates('40.3130432088809')");
}
});
WebEngine.load(MapURL.toExternalForm());
}