Tôi có một dự án yêu cầu nhúng bản đồ google vào một ứng dụng java trên máy tính để bàn. Tôi tìm thấy sau khi một số nghiên cứu mà Java FX cung cấp chức năng này và tiến hành viết một ứng dụng mẫu như một PoC. ứng dụng đã hoạt động và mọi thứ đều ổn. Sau khi nâng cấp lên phiên bản 7u7 java mới, mã của tôi không còn hoạt động như trước đây nữa. Mã chạy và hiển thị trang web, nhưng không có sự kiện cử chỉ (paning/phóng to) nào được kích hoạt trên trang web (google maps) và vì lý do nào đó khi tôi clikc và kéo (như để xoay) tôi nhận được ngoại lệ kèm theo tôi không có ý nghĩa gì cả.nhúng Google Maps vào ứng dụng máy tính để bàn JavaFX 2.2 ném ngoại lệ và không thực hiện
Tôi sẽ đánh giá rất cao bất kỳ thông tin chi tiết nào mà ai đó có thể có trong việc nhúng bản đồ Google Maps trong ứng dụng JavaFX 2.2. Cảm ơn bạn trước sự giúp đỡ nào và/hoặc gợi ý
Tiếp theo là mã ứng dụng/HTML code của tôi và ném ngoại lệ:
JavaFX mã:
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 nạp vào Web xem:
<!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>
ném ngoại lệ khi kéo trong giao diện web:
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)
điều tốt nhất cần làm là hoàn nguyên về JavaFX 2.1. Như tôi đã nói trước đó, tôi đã thử quay lại 2.0.3 (đây là phiên bản cũ nhất cung cấp trên trang web của họ) và giao diện với Google Maps hoạt động tốt, nhưng cầu JavaScript đến JavaFX không được triển khai trên phiên bản đó và tôi yêu cầu cũng vậy. phiên bản duy nhất sẽ hoạt động với Google Maps và triển khai cầu JavaScript-JavaFX là 2.1 và tôi không thể tìm thấy bất kỳ đâu để tải xuống. Tôi cần phiên bản 2.1 32.Nếu bạn biết một nơi nào đó tôi có thể tải nó từ nó sẽ được rất nhiều đánh giá cao. – user1666216
Xin lỗi thời gian chạy JavaFX 2.1 và sdk hiện tại [không phải nơi nó được cho là] (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javafx-419431.html), vì vậy tôi không biết tìm chúng ở đâu. – jewelsea
Oracle hiện đã đặt [JavaFX 2.1 runtime và sdk] (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javafx-419431.html) nơi chúng được cho là . – jewelsea