Ich habe ein Projekt erfordert die Einbettung von Google Maps in einer Desktop-Java-Anwendung. Nach einigen Nachforschungen fand ich heraus, dass Java FX diese Funktionalität bietet und fuhr damit fort, eine Beispielanwendung als PoC zu schreiben. Die Anwendung hat funktioniert und alles war in Ordnung. Nach dem Upgrade auf die neue 7u7 Java-Version funktioniert mein Code nicht mehr wie zuvor. Der Code läuft und zeigt die Webseite, aber keine Geste (paning/zooming) Ereignisse werden auf die Webseite gefeuert (google maps) und aus irgendeinem Grund, wenn ich klikke und ziehe (wie um zu schwenken) bekomme ich die beigefügte Ausnahme welche Ich kann keinen Sinn machen.Einbetten von Google Maps in eine JavaFX 2.2-Desktop-Anwendung werfen Ausnahme und im Allgemeinen nicht
Ich würde sehr gerne jede Einsicht in die Embedding von Google Maps in einer JavaFX 2.2-Anwendung haben. Danke im Voraus für jede Hilfe und/oder Anregungen
Folgende ist mein Anwendungscode/HTML-Code und die Ausnahme ausgelöst:
JavaFX-Code:
private Scene scene;
private MyBrowser myBrowser;
private LocationClickHandler handler;
private Vector<Button> buttons;
//private Moderator moderator;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
buttons = new Vector<Button>();
//moderator = new Moderator();
handler=new LocationClickHandler();
primaryStage.setTitle("java-buddy.blogspot.com");
myBrowser = new MyBrowser();
//moderator.registerAddIconListener(myBrowser);
VBox mainbox = new VBox();
mainbox.getChildren().add(myBrowser);
// mainbox.getChildren().add(generateEntitiesButtonBox());
// mainbox.getChildren().add(generateSensorsButtonBox());
scene = new Scene(mainbox, 1280, 760);
primaryStage.setScene(scene);
primaryStage.show();
}
class MyBrowser extends Region {
HBox toolbar;
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
public MyBrowser(){
webView.setMinSize(1280, 400);
final URL urlGoogleMaps = getClass().getResource("googlemaps2.html");
webEngine.load(urlGoogleMaps.toExternalForm());
getChildren().add(webView);
/*webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override public void changed(ObservableValue<? extends State> ov, State oldState, State newState) {
if (newState == State.SUCCEEDED) {
JSObject win = (JSObject) webEngine.executeScript("window");
win.setMember("java", handler);
}
}
});*/
}
HTML-Code in die Web View geladen:
<!DOCTYPE html>
<html>
<head>
<title>Java-Buddy: Google Maps</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<style>#mapcanvas { height: 500px; width: 100%}</style>
<script type="text/javascript">
var map;
var icon="icons/Tank.png";
var last_clicked;
var elliptical=0;
var sensors = new Array();
var sensors_to_targets = new Array();
var targets = new Array();
var target_paths = new Array();
var target_polys = new Array();
var counter =0;
//var marker;
function loadmap(){
var options = {
zoom: 16,
center: new google.maps.LatLng(51.507222, -0.1275),
mapTypeId: google.maps.MapTypeId.SATELLITE,
streetViewControl: false
}
map = new google.maps.Map(document.getElementById("mapcanvas"), options);
google.maps.event.trigger(map,'resize');
google.maps.event.addListener(map, 'click', function(event) {
java.saveLocation(event.latLng.lat(),event.latLng.lng());
});
}
</script>
</head>
<body onload="loadmap()">
<div id="mapcanvas"></div>
</body>
</html>
Ausnahme ausgelöst, wenn in der Web-Ansicht ziehen:
java.lang.NullPointerException: Clipboard.putContent: null data
at com.sun.javafx.tk.quantum.QuantumClipboard.putContent(QuantumClipboard.java:442)
at javafx.scene.input.Clipboard.setContent(Clipboard.java:226)
at com.sun.webpane.sg.UIClientImpl.confirmStartDrag(UIClientImpl.java:178)
at com.sun.webpane.platform.WebPage.confirmStartDrag(WebPage.java:861)
at javafx.scene.web.WebView$19.handle(WebView.java:1204)
at javafx.scene.web.WebView$19.handle(WebView.java:1201)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$DnDGesture.fireEvent(Scene.java:2627)
at javafx.scene.Scene$DnDGesture.process(Scene.java:2706)
at javafx.scene.Scene$DnDGesture.access$8700(Scene.java:2603)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3340)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3164)
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3119)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1559)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2261)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:228)
at com.sun.glass.ui.View.handleMouseEvent(View.java:528)
at com.sun.glass.ui.View.notifyMouse(View.java:922)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
at java.lang.Thread.run(Unknown Source)
ist die beste Sache, um zu JavaFX 2.1 zurückzukehren. Wie ich bereits erwähnt habe, habe ich versucht, zurück zu 2.0.3 (das ist die neueste alte Version Oracle bietet auf ihrer Website) und die Schnittstelle mit Google Maps funktionierte gut, aber die JavaScript zu JavaFX Brücke ist nicht auf dieser Version implementiert, und ich brauche das Feature auch. Die einzige Version, die mit Google Maps funktioniert und eine JavaScript-JavaFX-Bridge implementiert, ist 2.1, und ich kann nirgendwo finden, wo ich sie herunterladen kann. Ich brauche die Version 2.1 32.Wenn Sie irgendwo wissen, wo ich es herunterladen kann, wäre es sehr zu schätzen. – user1666216
Entschuldigung die JavaFX 2.1 Laufzeit und SDK ist derzeit [nicht wo es sein soll] (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javafx-419431.html), Ich weiß nicht, wo ich sie finden kann. – jewelsea
Oracle hat jetzt die [JavaFX 2.1 Laufzeit und SDK] (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javafx-419431.html) dort platziert, wo sie sein sollen . – jewelsea