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

Java Discussion :

Erreur lors de l'appel du navigateur par défaut


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 123
    Par défaut Erreur lors de l'appel du navigateur par défaut
    Bonjour,

    Lorsque j'essaie d'ouvrir le navigateur par défaut de l'utilisateur, j'ai le message d'erreur suivant qui apparaît:
    java.lang.RuntimeException: java.io.IOException: Failed to open http://www.google.com. Error message: Class not registered
    Et voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(Desktop.isDesktopSupported()) {
    	try {
    		Desktop.getDesktop().browse(new URI(url));
    	} catch (IOException e) {
    		throw new RuntimeException(e);
    	} catch (URISyntaxException e) {
    		throw new RuntimeException(e);
    	}
    }
    Ma question est on ne peut plus simple: comment empêcher que l'erreur ne se produise? Et comment ouvrir le navigateur par défaut lorsque cette erreure est remontée?

    D'avance un grand merci.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    "Class not registered" : c'est le message d'erreur retourné par le navigateur par défaut. On ne peut pas faire grand chose dans Java à ce sujet. Vérifie déjà que ça fonctionne dans ton OS (sur Windows, en console, tape start <ton url>). Sur le Net, on voit que c'est une erreur courante avec chrome : Si tu cherches "chrome class not registered" dans ton moteur de recherche préféré, tu trouveras une multitude de site qui explique comment corriger le problème.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 123
    Par défaut
    Salut,

    Merci pour ta réponse.

    Quand je tape dans l'invit de commande start <url> j'ai effectivement une popup avec le même message d'erreur "Class not registered". Et sur un PC où je suis admin, ça fonctionne nickel.

    Mais mon problème est le suivant: je dois être capable de distribuer le programme à des parties tiers. Et je ne sais pas comment sera configuré leur machine.

    Quelqu'un connait il un moyen infaillible pour y arriver?

    D'avance merci.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je dirais que ce n'est pas à toi de te préoccuper de comment est installéeet paramétrée la machine d'exécution. Tout ce que tu dois fournir en tant que développeur :

    1. Une documentation qui dit ce qui doit être installé/configuré sur la machine (version de JRE, mémoire et espace disque nécessaire, navigateur par défaut, etc.) ;
    2. Et gérer proprement les erreurs (donc au mieux afficher un message qui dit que le navigateur n'est pas bien configuré et que l'utilisateur doit faire appel à son service d'exploitation, ou éventuellement afficher un manuel qui explique comment faire pour l'installer et le configurer.
      A ce propos, tu peux également tester l'action browse pour indiquer qu'il n'y a pas de navigateur par défaut et que c'est nécessaire (ou faire ça en amont de l'action d'UI, pour qu'elle ne soit même pas actionnable).
      Quelque chose comme ça :
      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
      if(Desktop.isDesktopSupported()) {
      		Desktop desktop = Desktop.getDesktop();
      		if ( desktop.isSupported(Action.BROWSE) ) {
      			try {
      				desktop.browse(new URI("http://www.google.com"));
      			} catch (IOException e) {
      				JOptionPane.showMessageDialog(null, "Problème avec votre navigateur : il n'est probablement pas bien configuré...");
      			} catch (URISyntaxException e) {
      				throw new RuntimeException(e);
      			}
      		}
      		else {
      			JOptionPane.showMessageDialog(null, "Aucun navigateur par défaut : veuillez configurer...blah blah...");
      		}
      	}
      	else {
      		JOptionPane.showMessageDialog(null, "Désolé, cette fonctionalité n'est pas disponible");
      	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 123
    Par défaut
    Salut,

    Merci bien pour tes réponses. C'est effectivement ce qu'on a fait au final: un message d'erreur en SWING.

    Dans nos recherches, nous avons également vu que JavaFX supportait l'intégration d'une page WEB. Mais notre client n'a pas encore migré vers Java 8. Donc ça attendra. Mais cela pourrait peut-être répondre à notre problème: Si le navigateur par défaut n'est pas supporté, on ouvre la page via JavaFX.

    Dernière question et mon problème sera 100% résolu: dans le message que nous affichons, nous invitons l'utilisateur a ouvrir manuellement son navigateur. Mais nous n'arrivons pas à pas copier/coller l'adresse qui est écrit dans le JPanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.add(new JLabel(message));
    JOptionPane.showMessageDialog(null, panel, title, gravity);
    Quelqu'un sait-il quel composant Java permet de sélectionner le message définit dans la boite de dialogue ?

    Merci beaucoup.

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Tu peux utiliser un JTextField plutot qu'un JLabel (en mettant setEditable(false), c'est plus propre).

    Sinon, tu peux taper direct dans le presse papier (il ne restera plus a l'utilisateur que coller):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          StringSelection stringSelection = new StringSelection("eya");
          Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
          clipboard.setContents(stringSelection, null);

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par VonDriguen Voir le message
    Dans nos recherches, nous avons également vu que JavaFX supportait l'intégration d'une page WEB. Mais notre client n'a pas encore migré vers Java 8. Donc ça attendra. Mais cela pourrait peut-être répondre à notre problème: Si le navigateur par défaut n'est pas supporté, on ouvre la page via JavaFX.
    Eventuellement, en attendant la possibilité d'intégrer la WebView JavaFX, tu peux utiliser le composant DJNative.

    Citation Envoyé par VonDriguen Voir le message
    Dernière question et mon problème sera 100% résolu: dans le message que nous affichons, nous invitons l'utilisateur a ouvrir manuellement son navigateur. Mais nous n'arrivons pas à pas copier/coller l'adresse qui est écrit dans le JPanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.add(new JLabel(message));
    JOptionPane.showMessageDialog(null, panel, title, gravity);
    Quelqu'un sait-il quel composant Java permet de sélectionner le message définit dans la boite de dialogue ?
    Première solution, utiliser un JTextField non éditable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	JPanel panel = new JPanel();
    		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    		JTextField label = new JTextField("http://www.groupe.com");
    		label.setEditable(false);
    		panel.add(label);
    		JOptionPane.showMessageDialog(null, panel, "Impossible de lancer le navigateur", JOptionPane.WARNING_MESSAGE);
    Avantage : l'utilisateur peut faire CTRL-A, CTRL-C pour faire le copier.
    Inconvénients :
    • le champ n'a pas le focus par défaut : il faut que l'utilisateur clique dessus pour lui donner (à part en faisant un JDialog, je ne vois pas comment contourner ce problème)
    • le double-clic pour sélectionner l'url affichée ne sélectionne pas toute l'URL.
      On peut régler ça par écouteur :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      final JTextField label = new JTextField("http://www.groupe.com");
      		label.addMouseListener(new MouseAdapter() {
      			@Override
      			public void mouseClicked(MouseEvent e) {
      				label.setSelectionStart(0);
      				label.setSelectionEnd(label.getText().length());
      			}
      		});
    • L'utilisateur est obligé de faire une manipulation. Il ne sait pas forcément laquelle : la plupart des utilisateur ne connaissent pas CTRL-A ou CTRL-C.
      On peut afficher un message d'explication, ajouter un bouton "COPIER vers le presse-papier", etc... ça commence à devenir compliqué.


    Seconde solution : passer par un JEditorPane :
    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
    JPanel panel = new JPanel();
    		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    		final JEditorPane  label = new JEditorPane ();
    		label.setContentType("text/html");
    		label.setText("<html><body><center>Cliquez sur l'adresse pour la copier dans le presse-papier.</center>"+
    		"<center><a href='http://www.groupe.com'>http://www.groupe.com</a></center></body><html>"); 
    		label.addHyperlinkListener(new HyperlinkListener() {
     
    			@Override
    			public void hyperlinkUpdate(HyperlinkEvent e) {
    				StringSelection stringSelection = new StringSelection(e.getURL().toString());
    				Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
    				clpbrd.setContents(stringSelection, null);
    			}
    		});
    		label.setEditable(false);
    		label.setBackground(panel.getBackground());
    		panel.add(label);
    		JOptionPane.showMessageDialog(null, panel, "Impossible de lancer le navigateur", JOptionPane.WARNING_MESSAGE);
    On a meilleur contrôle de l'affichage (on peut styler, etc), de l'interaction, etc... bien sûr on pourrait utiliser la même technique de copie vers le presse-papier dans le premier cas, sur simple clic dans le composant (encore faut-il que l'utilisateur soit averti qu'il doit cliquer sur le label).

    La solution la plus simple étant de directement copier dans le presse-papier à mon avis, avec un dialogue à 2 boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    String url = "http://www.google.com";
     
    		switch(JOptionPane.showConfirmDialog(null, "<html>L'adresse <font color='blue'>"+url+"</font> n'a pu être affichée dans un navigateur.<br>Voulez vous copier l'adresse dans le presse-papier (etc...) ?", "Impossible de lancer le navigateur", 
    				JOptionPane.YES_NO_OPTION,
    				JOptionPane.WARNING_MESSAGE)) {
    		case JOptionPane.YES_OPTION:
    			StringSelection stringSelection = new StringSelection(url);
    			Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
    			clpbrd.setContents(stringSelection, null);
    			break;
    		}

    [EDIT]Grillé : je laisse mon message, parce que je donne plus d'options possibles
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 123
    Par défaut
    Un grand merci pour les réponses :-)

    A présent, tout fonctionne.

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

Discussions similaires

  1. Appel du navigateur par défaut et méthode POST
    Par Pascal Fonteneau dans le forum Web & réseau
    Réponses: 2
    Dernier message: 23/01/2008, 07h56
  2. Réponses: 2
    Dernier message: 20/03/2007, 11h50
  3. [FOP] Erreur lors de l'appel new Driver();
    Par Dithy dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 15/09/2006, 00h26
  4. Erreur lors de l'accès à la base par DAO
    Par omlip dans le forum Langage
    Réponses: 7
    Dernier message: 27/06/2006, 12h25
  5. Erreur lors de l'appel d'un page ASP
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 27/08/2004, 15h17

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