JavaFX-在javascript代码完成后显示警报或对话框(GMapsFX、WebView)

JavaFX-在javascript代码完成后显示警报或对话框(GMapsFX、WebView),javascript,java,google-maps,javafx,webview,Javascript,Java,Google Maps,Javafx,Webview,在我的JavaFX应用程序中,我使用GMapsFX进行路由查找和可视化。对于可视化,我只需在Javascript中使用一个超时,并在地图上延迟显示标记。我遇到的问题是,在可视化结束后显示一个对话框(或js警报),告知有关搜索的信息(访问的节点数,我在java和js代码中都有这个信息)。有没有一个简单的方法可以做到这一点 GMapsFX软件包: public void startVisualization(){ LatLongBounds=新的LatLongBounds(); List latL

在我的JavaFX应用程序中,我使用GMapsFX进行路由查找和可视化。对于可视化,我只需在Javascript中使用一个超时,并在地图上延迟显示标记。我遇到的问题是,在可视化结束后显示一个对话框(或js警报),告知有关搜索的信息(访问的节点数,我在java和js代码中都有这个信息)。有没有一个简单的方法可以做到这一点

GMapsFX软件包:

public void startVisualization(){
LatLongBounds=新的LatLongBounds();
List latLongs=new ArrayList();
JavascriptArray jsArray=新的JavascriptArray();
manager.hideIntermediateMarkers();
manager.hideDestinationMarker();
//创建标记
对于(geography.geography点:点){
LatLong ll=新的LatLong(point.getX(),point.getY());
MarkerOptions=MarkerManager.createDefaultOptions(ll);
Marker newMarker=新标记(选项);
jsArray.push(newMarker);
markerList.add(newMarker);
扩展(ll);
}
//将贴图边界适配到可视化
manager.getMap().fitBounds(bounds);
//获取javascript运行时并执行动画
runtime=JavascriptRuntime.getInstance();
String命令=runtime.getFunction(“可视化搜索”,manager.getMap(),jsArray);
System.out.println(命令);
执行(命令);
//MapApp.showInfoAlert(“已访问的节点:”,latLongs.size()+“搜索中已访问的节点”);
manager.disableVisButton(true);
//manager.disableRouteButtons(假);
}

var延迟=300;
var图,标记;
var markerURL=”http://maps.google.com/mapfiles/kml/paddle/red-diamond-lv.png";
var destURL=”http://maps.google.com/mapfiles/kml/pal2/icon5.png";
函数可视化搜索(mapParam、markersParam){
markers=markersParam;
map=mapParam;
下降();
}
函数displayMarker(标记、超时、URL){
setTimeout(函数(){
marker.setIcon(URL);
marker.setMap(map);
},超时);
}
函数drop(){
var i;
对于(i=1;i<1.length-1;++i){
显示标记(标记[i],i*延迟,标记URL);
}
displayMarker(markers[markers.length-1],i*delay,destURL)
}

WebView没有内置警报。由于WebView中的javascript而显示的任何警报都需要通过使用警报/对话框或JavaFX中的自定义视图(通过onAlert事件处理程序)来执行。您可以使用以下方法获取WebEngine并注册事件处理程序,以响应来自javascript的警报事件:

gmapview.getWebView().getEngine().setOnAlert(EventHandler<WebEvent<String>> e);
gmapview.getWebView().getEngine().setOnAlert(事件处理程序e);
事件处理程序将获取发出的任何javascript警报的字符串值。由您决定如何显示它

var delay = 300;
var map, markers;
var markerURL = "http://maps.google.com/mapfiles/kml/paddle/red-diamond-lv.png";
var destURL = "http://maps.google.com/mapfiles/kml/pal2/icon5.png";

function visualizeSearch(mapParam, markersParam) {
    markers = markersParam;
    map = mapParam; 
    drop();
}

function displayMarker(marker, timeout, URL) {
    window.setTimeout(function() {
        marker.setIcon(URL);
        marker.setMap(map);
    }, timeout);
}

function drop() {
    var i;
    for(i = 1; i < markers.length - 1; ++i) {
        displayMarker(markers[i], i*delay, markerURL);
    }
    displayMarker(markers[markers.length - 1], i*delay, destURL)
}
gmapview.getWebView().getEngine().setOnAlert(EventHandler<WebEvent<String>> e);