16

有没有一种简单的方法可以在 GUI 的 JPanel 中打开网页?

如果没有,您如何使用计算机的默认 Web 浏览器打开网页?

我希望我可以用不到 20 行代码来做一些事情,并且最多需要创建一个类。虽然没有理由 20,只是希望代码少......

我打算打开一个指南去玩游戏。该指南是在线的并且有多个页面,但是这些页面相互链接,所以我希望我只需要用我的代码调用一个 URL。

4

6 回答 6

34

使用默认 Web 浏览器打开网页很容易:

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

嵌入浏览器并不是那么容易。JEditorPane一些HTML 能力(如果我没记错我有限的 Swing 知识的话),但它非常有限,不适合通用浏览器。

于 2009-04-14T19:13:47.937 回答
2

我知道有两种标准方法:

  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();
            }
        }
    }
});
于 2009-04-14T19:11:40.890 回答
0

如果您正在开发小程序,则可以使用AppletContext.showDocument。那将是一个单行:

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

如果您正在开发桌面应用程序,您可以尝试Bare Bones Browser Launch

于 2009-04-14T19:14:27.123 回答
0

根本没有尝试过,但是来自lobo 浏览器的cobra HTML 解析器和查看器,一个用纯 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");
  }
}
于 2009-04-14T19:15:07.637 回答
-1

我不知道这样的内置函数是否存在,但我会使用带有 iexplore.exe 或 firefox.exe 的Runtime类的exec作为参数。

于 2009-04-14T19:11:43.560 回答
-2

请尝试以下代码:

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();
} 
于 2017-12-13T00:48:30.353 回答