Abra un enlace en el navegador con el botón java?

¿Cómo puedo abrir un enlace en el navegador predeterminado con un clic de botón, a lo largo de las líneas de

button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { open("www.google.com"); // just what is the 'open' method? } }); 

?

Use el método Desktop # browse (URI) . Abre un URI en el navegador predeterminado del usuario.

 public static boolean openWebpage(URI uri) { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { try { desktop.browse(uri); return true; } catch (Exception e) { e.printStackTrace(); } } return false; } public static boolean openWebpage(URL url) { try { return openWebpage(url.toURI()); } catch (URISyntaxException e) { e.printStackTrace(); } return false; } 
 public static void openWebpage(String urlString) { try { Desktop.getDesktop().browse(new URL(urlString).toURI()); } catch (Exception e) { e.printStackTrace(); } } 
 try { Desktop.getDesktop().browse(new URL("http://www.google.com").toURI()); } catch (Exception e) {} 

nota: debe incluir las importaciones necesarias de java.net

Una solución sin el entorno de escritorio es BrowserLauncher2 . Esta solución es más general ya que en Linux, Desktop no siempre está disponible.

La respuesta larga se publica en https://stackoverflow.com/a/21676290/873282

 private void ButtonOpenWebActionPerformed(java.awt.event.ActionEvent evt) { try { String url = "https://www.google.com"; java.awt.Desktop.getDesktop().browse(java.net.URI.create(url)); } catch (java.io.IOException e) { System.out.println(e.getMessage()); } } 
 public static void openWebPage(String url) { try { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { desktop.browse(new URI(url)); } throw new NullPointerException(); } catch (Exception e) { JOptionPane.showMessageDialog(null, url, "", JOptionPane.PLAIN_MESSAGE); } } 

Sé que esta es una vieja pregunta, pero a veces el Desktop.getDesktop() produce un locking inesperado como en Ubuntu 18.04. Por lo tanto, tengo que volver a escribir mi código de esta manera:

 public static void openURL(String domain) { String url = "https://" + domain; Runtime rt = Runtime.getRuntime(); try { if (MUtils.isWindows()) { rt.exec("rundll32 url.dll,FileProtocolHandler " + url).waitFor(); Debug.log("Browser: " + url); } else if (MUtils.isMac()) { String[] cmd = {"open", url}; rt.exec(cmd).waitFor(); Debug.log("Browser: " + url); } else if (MUtils.isUnix()) { String[] cmd = {"xdg-open", url}; rt.exec(cmd).waitFor(); Debug.log("Browser: " + url); } else { try { throw new IllegalStateException(); } catch (IllegalStateException e1) { MUtils.alertMessage(Lang.get("desktop.not.supported"), MainPn.getMainPn()); e1.printStackTrace(); } } } catch (IOException | InterruptedException e) { e.printStackTrace(); } } public static boolean isWindows() { return OS.contains("win"); } public static boolean isMac() { return OS.contains("mac"); } public static boolean isUnix() { return OS.contains("nix") || OS.contains("nux") || OS.indexOf("aix") > 0; } 

Entonces podemos llamar a este ayudante desde la instancia:

 button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { MUtils.openURL("www.google.com"); // just what is the 'open' method? } });