IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Probleme entre JSObject et GetEngine()


Sujet :

JavaFX

  1. #1
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut Probleme entre JSObject et GetEngine()
    Bonjour,
    J'ai ,à nouveau, un petit Bug dans l'appli que j'essaye de faire: J'utilise le Bridge (cf le tuto de Mr BOUYE) mais dans la même page HTML , j'ai besoin aussi d'utiliser une fonction à laquelle j'envoie des données (finalement connexion bidirectionnelle) et c'est la que ça se gâte , j'obtiens le message d'erreur suivant quand je clicke sur le bouton modification (géré par l'évènement du mème nom):Nom : Message d'erreur.png
Affichages : 142
Taille : 116,0 Ko.

    Voici une portion de mon code java :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    public void start (Stage stage) throws Exception {
     
    		 Scene scene = new Scene(new Group());
    	    	final WebView webView = new WebView();
     
    	    	final WebView webView1 = new WebView();
    	    	WebEngine webengine = webView1.getEngine();
    	    	webengine.setJavaScriptEnabled(true);
     
    	    	webView.setPrefWidth(taillefenetre);
    	    	webView1.setPrefWidth(taillefenetre);
     
    	    	Button Coordonnee = new Button ("Coordonnees");
    	    	Button Aurevoir = new Button("Trajet du Drone");
    	    	Button Modification = new Button("Modification");
    	    	DropShadow shadow = new DropShadow();
     
    	    	ScrollPane sp = new ScrollPane();
     
    	    	final VBox vbox = new VBox();
    	    	final HBox hbox = new HBox();
    	    	final HBox hbox1 = new HBox();
    	    	final HBox hbox2 = new HBox();
     
    	    	stage.setWidth(taillefenetre*2+40);
    	        stage.setHeight(taillefenetre+50);
     
    // Assemblage du tableau
     
    	        final TableColumn<Coordonnees, Boolean> visibleColumn = new TableColumn<>("A supprimer");
    	        visibleColumn.setMinWidth(taillecolonne/2);
    	        visibleColumn.setCellValueFactory(new PropertyValueFactory<>("visible"));
     
    	        final TableColumn<Coordonnees, Integer> OrdreCol = new TableColumn<>("Ordre");
    	        OrdreCol.setMinWidth(taillecolonne/2);
    	        OrdreCol.setCellValueFactory( new PropertyValueFactory<>("Ordre"));
     
    	        final TableColumn<Coordonnees, Double> LongeCol = new TableColumn<>("Longitude");
    	        LongeCol.setMinWidth(taillecolonne);
    	        LongeCol.setCellValueFactory( new PropertyValueFactory<>("Longitude"));
     
    	        final TableColumn<Coordonnees, Double> LatCol = new TableColumn<>("Latitude");
    	        LatCol.setMinWidth(taillecolonne);
    	        LatCol.setCellValueFactory(new PropertyValueFactory<>("Latitude"));
     
    	        tableCoor.getColumns().setAll(visibleColumn, OrdreCol, LongeCol, LatCol);
     
    	        //////Gestion affichage bouton suppression
    	        visibleColumn.setCellFactory(
    	                new Callback<TableColumn<Coordonnees, Boolean>, TableCell<Coordonnees, Boolean>>() {
     
    	                    @Override
    	                    public TableCell<Coordonnees, Boolean> call(TableColumn<Coordonnees, Boolean> p) {
    	                        return new ButtonCell();
    	                    } });
     
     
     
    	        tableCoor.setItems(data);
    	    //    tableCoor.getColumns().addAll(OrdreCol, LongeCol,LatCol);   
    	        webView.getEngine().load(getClass().getResource("position.html").toExternalForm());
    	        final JSObject jsobj = (JSObject) webView.getEngine().executeScript("window"); 
    	        jsobj.setMember("java", new Bridge()); 
    	        webView1.getEngine().load(getClass().getResource("affiche.html").toExternalForm());
     // Assemblage et affichage
     
     
    	        hbox.getChildren().addAll(Coordonnee,Aurevoir,Modification);// Les boutons
     
    	        sp.setContent(tableCoor);							// Le tableau
    	        sp.setPrefSize(taillefenetre, 150);
    	        sp.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
    	        sp.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
    	        sp.setVmax(3);
     
    	        hbox1.getChildren().addAll(webView,webView1);		//les deux ecrans map
    	        hbox1.setMaxHeight(400);
     
    	        hbox2.getChildren().add(sp);						//Le scroll avec le tableau
     
    	        vbox.setSpacing(5);
    	        vbox.setPadding(new Insets(10, 0, 0, 10));
    	        vbox.getChildren().addAll(hbox,hbox1, hbox2);		//empilage des 3 hbox
     
    	        ((Group) scene.getRoot()).getChildren().addAll(vbox);
    	        stage.setTitle("Test de WebView"); 
    	        stage.setScene(scene);
    	        stage.show();
     
     
    	     // gestion boutons
    	        Coordonnee.addEventHandler(MouseEvent.MOUSE_CLICKED,
    	                new EventHandler<MouseEvent>() {
    	                  @Override
    	                  public void handle(MouseEvent e) {
    	                	  Coordonnee.setEffect(shadow);
    	                	  Modification.setEffect(null);
    	                	  Aurevoir.setEffect(null);
    	                	  sp.setVisible(true);
     
    	                	  	OrdreCol.setVisible(true);
    	          	        	LongeCol.setVisible(true);
    	          	        	LatCol.setVisible(true);
    	                  }
    	                });
     
    	        Aurevoir.addEventHandler(MouseEvent.MOUSE_CLICKED,
    	                new EventHandler<MouseEvent>() {
    	                  @Override
    	                  public void handle(MouseEvent e) {
    	                	  Aurevoir.setEffect(shadow);
    	                	  Modification.setEffect(null);
    	                	  Coordonnee.setEffect(null);
    	                	  webView1.getEngine().executeScript("montranslator(' " + coordoString + " ')");//peut etre a revoir
     
    	                  }
    	                });
     
     
    	        Modification.addEventHandler(MouseEvent.MOUSE_CLICKED,
    	                new EventHandler<MouseEvent>() {
    	                  @Override
    	                  public void handle(MouseEvent e) {
    	                	  int asup=2;
    	                	  Modification.setEffect(shadow);
    	                	  webView.getEngine().executeScript("clearMarkers(' " + asup  + " ')");
     
    	                  }
    	                });
     
    	 }
    J'ai bien essayé de faire un jsobj.remove(null); mais sans succès ... j'ai aussi été voir sur Starkoverflow mais sans succès ...
    Pouvez vous m'aider ?
    En attente de vous lire

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 854
    Points : 22 878
    Points
    22 878
    Billets dans le blog
    51
    Par défaut
    Juste un truc, dans la dernière version de Java sortie; un correctif à eut lieu sur le WebEngine pour éviter que ce dernier conserve une référence ad vitam eternam sur l'objet bridge passé ce qui provoque une fuite mémoire. Donc si tu ne conserves pas une référence dessus dans ta classe Java, cet objet bridge sera garbage collected à un moment ou un autre et donc tous les appels suivant échoueront car il sera null dans la partie JavaScript.

  3. #3
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par bouye Voir le message
    Juste un truc, dans la dernière version de Java sortie; un correctif à eut lieu sur le WebEngine pour éviter que ce dernier conserve une référence ad vitam eternam sur l'objet bridge passé ce qui provoque une fuite mémoire. Donc si tu ne conserves pas une référence dessus dans ta classe Java, cet objet bridge sera garbage collected à un moment ou un autre et donc tous les appels suivant échoueront car il sera null dans la partie JavaScript.
    J'essaye de revoir le problème dans cette direction ce week-end et vous tiens au courant de l'avancé.
    Merci pour votre aide toujours très pertinente mais aussi pour tous les super tutoriaux édités.
    Cdt

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 854
    Points : 22 878
    Points
    22 878
    Billets dans le blog
    51
    Par défaut
    Ensuite concernant ton réel soucis, quel est le code qui plante coté JavaScript ?

  5. #5
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut coté javascript
    Citation Envoyé par bouye Voir le message
    Ensuite concernant ton réel soucis, quel est le code qui plante coté JavaScript ?
    Bonsoir Mr BOUYE,
    Coté JavaScript le code est propre , si je le lance indépendamment de java ça tourne correctement , je peux le mettre en ligne éventuellement , mais je suis pas sure que ça apporte grand chose.
    Là ou ça plante c'est à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    webView.getEngine().executeScript("clearMarkers(' " + asup  + " ')");
    la fonction ClearMarkers javascript doit normalement enlever le marker selectionné par asup dans un tableau de marker .
    En tout cas merci de vous pencher sur mon problème

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 854
    Points : 22 878
    Points
    22 878
    Billets dans le blog
    51
    Par défaut
    Je veux bien mais le screen de l'erreur que tu as posté plus haut indique bien que le problème se site dans le code JavaScript.

  7. #7
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut
    Bonjour Mr BOUYE , j'ai suivi toutes vos remarques et elles ont aboutie à la solution. Le problème était que lorsque j'appelle la fonction JavaScript et que je lui transmets un argument celui ci est en String , or dans le code javascript , même si on ne donne pas de type à la variable reçue elle doit être en Integer puisqu'elle est l'indice d'un tableau , donc après avoir éliminé le problème du ramasse miette , j'en suis arrivé à ce problème j'ai donc du "Parser" pour pouvoir intégrer l'argument. Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Modification.addEventHandler(MouseEvent.MOUSE_CLICKED,
    	                new EventHandler<MouseEvent>() {
    	                  @Override
    	                  public void handle(MouseEvent e) {
     
    	                	  Modification.setEffect(shadow);
    	                	  webView.getEngine().executeScript("montranslator1(' " + user  + " ')");
    	                  }
    	                });
    et le code javaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function montranslator1(user){
    	var number = parseFloat(user);
     markers[number].setMap(null);
    }
    J'ai aussi une autre question:
    Mes valeurs Markers apparaissent dans un tableau avec en même temps création d'un bouton "Delete" dans une colonne afin d'éliminer une mauvaise valeur (code pompé sur votre tuto API JavaFX) mais par contre il m'est impossible de gérer l'évènement suppression de la ligne du tableau avec la suppression du Marker en ne pressant que sur un seul bouton . Est il possible de relier ces deux évènement simplement ?
    Quoiqu'il en soit tous mes remerciements pour vos remarques pertinentes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Socket] Probleme entre un Client C et un serveur JAVA
    Par bpy1401 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 28/02/2006, 08h40
  2. probleme entre IE et Golive
    Par zipsy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/02/2006, 16h51
  3. [PostgreSQL] [PostgreSQL] Probleme entre PHP & PostgreSQL
    Par flo78 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/01/2006, 10h51
  4. Réponses: 8
    Dernier message: 30/12/2005, 13h47
  5. [MFC] enorme probleme entre statics et includes
    Par giova_fr dans le forum MFC
    Réponses: 4
    Dernier message: 09/12/2005, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo