Гиперссылка JLabel для открытия браузера по правильному URL - PullRequest
10 голосов
/ 29 декабря 2011

Мне нужно создать ярлык с помощью Java Swing, который можно будет нажимать и который сможет открыть браузер по умолчанию на рабочем столе и перенаправить его на определенный URL-адрес. Мой код может открыть браузер, но не перенаправить его на правильный 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();
 }
}

Как открыть браузер по умолчанию и перенаправить на правильный URL с помощью Java Swing?

Ответы [ 6 ]

15 голосов
/ 03 сентября 2012

Легко, просто скопируйте этот метод в ваш код с правильными параметрами. Не забудьте добавить необходимый импорт.

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
                    }
            }
        });
    }
1 голос
/ 29 декабря 2011

Это, кажется, работает, Здесь - это отличная альтернатива, которую Макдауэлл может попробовать, используя 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 */ }
  }
1 голос
/ 29 декабря 2011

Ваш код работал нормально, когда я работал на Mac с Safari в качестве браузера по умолчанию.

Какой браузер вы используете и в какой ОС вы работаете?

1 голос
/ 29 декабря 2011

Здесь - это пример кода для того, что вам нужно.

1 голос
/ 29 декабря 2011
 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());
                }
        }
      }
   }
});
0 голосов
/ 27 октября 2012

Обнаружил проблему: на Ubuntu 12.10 я установил "libgnome2", и теперь он работает отлично.

...