2011-12-29 14 views
9

Potrzebuję utworzyć etykietę z Java Swing, która jest klikalna i może otworzyć domyślną przeglądarkę na pulpicie i przekierować ją do określonego adresu URL. Mój kod jest w stanie otworzyć przeglądarkę, ale nie przekierowuję jej do poprawnego adresu URL (domyślna strona główna jest załadowana). Mój kod testowy:JLabel hiperłącze do otwartej przeglądarki pod prawidłowym adresem URL

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.io.IOException; 
import java.net.*; 

public class LinkTest extends JFrame { 

public LinkTest() { 
JPanel p = new JPanel(); 

JLabel link = new JLabel("Click here"); 
link.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
link.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
     if (e.getClickCount() > 0) { 
      if (Desktop.isDesktopSupported()) { 
       Desktop desktop = Desktop.getDesktop(); 
       try { 
        URI uri = new URI("http://www.bbc.co.uk"); 
        desktop.browse(uri); 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       } catch (URISyntaxException ex) { 
        ex.printStackTrace(); 
       } 
     } 
     } 
    } 
}); 
p.add(link); 
getContentPane().add(BorderLayout.NORTH, p); 
} 

public static void main(String[] args) { 
    LinkTest linkTest = new LinkTest(); 
    linkTest.setSize(640,100); 
    linkTest.show(); 
} 
} 

Jak mogę otworzyć domyślną przeglądarkę i przekierować do prawidłowego adresu URL za pomocą Java Swing?

+1

Jakie systemy operacyjne i przeglądarki? Wszelkie wyjątki? –

+0

Działa tutaj na Win 7, używając późnego modelu 1.6 JRE & FF jako domyślnej przeglądarki. –

+0

Przepraszam, zapomniałem wspomnieć o OS/przeglądarce: Ubuntu 11.10 + Chrome 16 + Java 6 – Randomize

Odpowiedz

0

Znalazłem problem: na Ubuntu 12.10 Zainstalowałem "libgnome2" i działa teraz idealnie.

1
public void mouseClicked(MouseEvent e) { 
     if (e.getClickCount() > 0) { 
      if (Desktop.isDesktopSupported()) { 
           try { 
        String osName = System.getProperty("os.name"); 
        String urlPath = "http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html"; 

        if (osName.startsWith("Windows")) 
         Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + urlPath); 
        else { 
         String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; 
         String browser = null; 
         for (int count = 0; count < browsers.length && browser == null; count++) 
          if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor() == 0) 
           browser = browsers[count]; 
         Runtime.getRuntime().exec(new String[] { browser, urlPath }); 
        } 
       } 
       catch (Exception e) { 
        JOptionPane.showMessageDialog(null, "Error in opening browser" + ":\n" + e.getLocalizedMessage()); 
       } 
     } 
     } 
    } 
}); 
+1

Zorientowany na system Windows? – Randomize

1

Here to próbka kodu do tego, czego potrzebujesz.

+0

wygląda w systemie Windows? – Randomize

1

Twój kod sprawnie działał na komputerze Mac z przeglądarką Safari jako domyślną przeglądarką.

Z jakiej przeglądarki korzystasz i z jakiego systemu operacyjnego korzystasz?

+0

Ubuntu 11.10 + Chrome 16 + Java 6 – Randomize

1

To wydaje się działać, Here jest doskonałą alternatywą warto spróbować przez McDowell, przy użyciu JButton,

public static void main(String[] args) throws URISyntaxException { 
    final URI uri = new URI("http://java.sun.com"); 
    class OpenUrlAction implements ActionListener { 
     @Override public void actionPerformed(ActionEvent e) { 
     open(uri); 
     } 
    } 
    JFrame frame = new JFrame("Links"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(100, 400); 
    Container container = frame.getContentPane(); 
    container.setLayout(new GridBagLayout()); 
    JButton button = new JButton(); 
    button.setText("<HTML>Click the <FONT color=\"#000099\"><U>link</U></FONT>" 
     + " to go to the Java website.</HTML>"); 
    button.setHorizontalAlignment(SwingConstants.LEFT); 
    button.setBorderPainted(false); 
    button.setOpaque(false); 
    button.setBackground(Color.WHITE); 
    button.setToolTipText(uri.toString()); 
    button.addActionListener(new OpenUrlAction()); 
    container.add(button); 
    frame.setVisible(true); 
    } 

    private static void open(URI uri) { 
    if (Desktop.isDesktopSupported()) { 
     try { 
     Desktop.getDesktop().browse(uri); 
     } catch (IOException e) { /* TODO: error handling */ } 
    } else { /* TODO: error handling */ } 
    } 
+0

dziękuję, ale to nie działa dla mnie. – Randomize

15

proste, wystarczy skopiować ten sposób do kodu z odpowiednimi parametrami. Nie zapomnij dodać potrzebnego importu.

import java.awt.Cursor; 
import java.awt.Desktop; 
import java.awt.EventQueue; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.io.IOException; 
import java.net.URI; 
import java.net.URISyntaxException; 


    private void goWebsite(JLabel website, final String url, String text) { 
     website.setText("<html> Website : <a href=\"\">"+text+"</a></html>"); 
     website.setCursor(new Cursor(Cursor.HAND_CURSOR)); 
     website.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
        try { 
          Desktop.getDesktop().browse(new URI(url)); 
        } catch (URISyntaxException | IOException ex) { 
          //It looks like there's a problem 
        } 
      } 
     }); 
    } 
Powiązane problemy