Bonjour à tous,
J'étudie actuellement le portage d'une application réalisée en RealBasic vers JavaFX. Cette application utilise intensivement l'affichage de cartes à travers un composant browser. Le code HTML est généré dynamiquement à partir de données (traces GPS) et envoyé comme une chaine de caractères au composant browser. A noter que je connais très bien RealBasic alors que je connais peu Java. J'espère progresser à travers ce projet.
Tout le processus décrit ci dessus devrait être pouvoir être reproduit avec une webwiew et un loadContent. J'ai développé une appli test comprenant une fenêtre mère comportant un bouton permettant de charger un fichier texte (la trace GPS). Si le fichier est correctement décodé, un bouton "Carte" devient visible. Ce bouton génère un fichier HTML affichant la trace et demande l'affichage du code HTML dans une webview intégrée à une nouvelle fenêtre. Jusque là tout va bien la carte s'affiche correctement. On referme la fenêtre, on clique à nouveau sur le bouton carte, la webwiew reste désespéremment vide... Si je charge un autre fichier trace, la trace ne s'affiche pas. Tout se passe comme si la webview ne fonctionnait qu'une fois.
Après les nombreuses heures passées la dessus j'ai découvert que le javascript devait être probablement à l'origine du problème... Si je passe une chaine comportant un simple "Hello World", je peux l'afficher indéfiniment avec mon bouton carte. Plus étonnant, j'ai un code HTML de carte beaucoup plus simpliste au niveau javascript, je peux aussi l'afficher indéfiniment... A noter que le code plus complexe fonctionne correctement au premier affichage...
Le bouton Carte de la fenêtre mère déclenche la procédure suivante :
La classe ShowMap comporte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private void afficheCarte() { if (myTrace.isDecodage()) { // Classe de construction et d'affichage de la carte dans une nouvelle fenêtre ShowMap myMap = new ShowMap(); myMap.showFullScreen(myTrace); } }
Au niveau de la console au premier affichage de la carte j'ai bien la sortie attendue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 private static WebEngine eng = null; private static WebView viewMap = null; // Sans cette procédure je n'affichais qu'une seule fois // quelque soit la chaine HTML protected WebView getWebView() { if (eng == null) { viewMap = new WebView(); //webView.setContextMenuEnabled(false); eng = viewMap.getEngine(); } return viewMap; } public void showFullScreen(traceGPS currTrace) { // la classe MapVisu génère le code HTML map_visu visuMap = new map_visu(currTrace); if (visuMap.isMap_OK()) { AnchorPane anchorPane = new AnchorPane(); WebView viewMap = getWebView(); //WebView viewMap = new WebView(); //WebEngine eng = viewMap.getEngine(); AnchorPane.setTopAnchor(viewMap, 10.0); AnchorPane.setLeftAnchor(viewMap, 10.0); AnchorPane.setRightAnchor(viewMap, 10.0); AnchorPane.setBottomAnchor(viewMap, 10.0); anchorPane.getChildren().add(viewMap); eng.getLoadWorker().stateProperty().addListener((ObservableValue<? extends Worker.State> observableValue, Worker.State oldValue, Worker.State newValue) -> { System.out.printf("%s -> %s", oldValue, newValue).println(); }); String sDebug = visuMap.getMap_HTML(); // sDebug peut être éventuellement initialisé par un simple HelloWorld eng.loadContent(sDebug); StackPane subRoot = new StackPane(); subRoot.getChildren().add(anchorPane); Scene secondScene = new Scene(subRoot, 900, 600); Stage subStage = new Stage(); // On veut que cette fenêtre soit modale subStage.initModality(Modality.APPLICATION_MODAL); subStage.setScene(secondScene); // subStage.setMaximized(true); subStage.show(); } }
Après fermeture de la fenêtre et un nouveau clic sur le bouton Carte j'obtiens ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 READY -> SCHEDULED SCHEDULED -> RUNNING RUNNING -> SUCCEEDED
Quelqu'un a t il une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 SUCCEEDED -> READY READY -> SCHEDULED SCHEDULED -> RUNNING RUNNING -> SUCCEEDED SUCCEEDED -> READY SUCCEEDED -> READY READY -> SCHEDULED READY -> SCHEDULED SCHEDULED -> RUNNING SCHEDULED -> RUNNING RUNNING -> SUCCEEDED RUNNING -> SUCCEEDED SUCCEEDED -> READY SUCCEEDED -> READY READY -> SCHEDULED READY -> SCHEDULED SCHEDULED -> RUNNING SCHEDULED -> RUNNING RUNNING -> SUCCEEDED RUNNING -> SUCCEEDED
Partager