Как вы открываете веб-страницы на Java? - PullRequest
13 голосов
/ 14 апреля 2009

Есть ли простой способ открыть веб-страницу в JPanel графического интерфейса?

Если нет, то как открыть веб-страницу с помощью веб-браузера по умолчанию на компьютере?

Я надеюсь на что-то, что я могу сделать с менее чем 20 строками кода, и самое большее потребуется создать один класс. Впрочем, нет никаких оснований для 20, просто надеяться на небольшой код ...

Я планирую открыть руководство по игре. Это руководство находится в Интернете и содержит несколько страниц, но эти страницы связаны между собой, поэтому я надеюсь, что мне придется назвать только один URL с моим кодом.

Ответы [ 6 ]

29 голосов
/ 14 апреля 2009

Открыть веб-страницу с помощью веб-браузера по умолчанию очень просто:

java.awt.Desktop.getDesktop().browse(theURI);

Встраивать браузер не так просто. JEditorPane имеет некоторую возможность HTML (если я правильно помню свои ограниченные знания Swing), но она очень ограничена и не подходит для браузера общего назначения.

2 голосов
/ 14 апреля 2009

Есть два стандартных способа, которые я знаю:

  1. Стандартный JEditorPane компонент
  2. Desktop. getDesktop(). browse(URI), чтобы открыть браузер пользователя по умолчанию (Java 6 или более поздняя версия)

    Скоро также будет третье:

  3. Компонент JWebPane, который, очевидно, еще не выпущен

JEditorPane очень голые; он не обрабатывает CSS или JavaScript, и вам даже придется обрабатывать гиперссылки самостоятельно. Но вы можете встроить его в свое приложение более плавно, чем запуск FireFox.

Вот пример того, как использовать гиперссылки (при условии, что ваши документы не используют фреймы):

// ... initialize myEditorPane
myEditorPane.setEditable(false); // to allow it to generate HyperlinkEvents
myEditorPane.addHyperlinkListener(new HyperlinkListener() {
    public void hyperlinkUpdate(HyperlinkEvent e) {
        if (e.getEventType() == HyperlinkEvent.EventType.ENTERED) {
            myEditorPane.setToolTipText(e.getDescription());
        } else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) {
            myEditorPane.setToolTipText(null);
        } else if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
            try {
                myEditorPane.setPage(e.getURL());
            } catch (IOException ex) {
                // handle error
                ex.printStackTrace();
            }
        }
    }
});
0 голосов
/ 13 декабря 2017

Пожалуйста, попробуйте ниже код:

import java.awt.Desktop;
import java.net.URI;
import java.net.URISyntaxExaception;

//below is the code
//whatvever the url is it has to have https://

Desktop d = Desktop.getDesktop();
try {
    d.browse(new URI("http://google.com"));
} catch (IOException | URISyntaxException e2) {
    e2.printStackTrace();
} 
0 голосов
/ 14 апреля 2009

даже не пробовал, но парсер HTML кобры и программа просмотра из браузера lobo , браузера, написанного на чистом Java, могут быть тем, что вам нужно. Они предоставляют пример кода для настройки онлайн-просмотра HTML:

import javax.swing.*;
import org.lobobrowser.html.gui.*;
import org.lobobrowser.html.test.*;

public class BareMinimumTest {
  public static void main(String[] args) throws Exception {
    JFrame window = new JFrame();
    HtmlPanel panel = new HtmlPanel();
    window.getContentPane().add(panel);
    window.setSize(600, 400);
    window.setVisible(true);
    new SimpleHtmlRendererContext(panel, new SimpleUserAgentContext())
    .navigate("http://lobobrowser.org/browser/home.jsp");
  }
}
0 голосов
/ 14 апреля 2009

Если вы разрабатываете апплет, вы можете использовать AppletContext.showDocument . Это будет одна строка:

getAppletContext().showDocument("http://example.com", "_blank");

Если вы разрабатываете настольное приложение, вы можете попробовать Запустить браузер Bare Bones .

0 голосов
/ 14 апреля 2009

Я не знаю, существует ли такая встроенная функция, но я бы использовал Runtime класса exec с iexplore.exe или firefox.exe в качестве аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...