【问题标题】:How do you open web pages in Java?你如何在 Java 中打开网页?
【发布时间】:2010-10-19 10:22:52
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java web jframe


【解决方案1】:

请尝试以下代码:

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();
} 

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 桌面 API 仅适用于 java 1.6
    • @dfa:所以?早期不需要任何东西,使用最新的 API 是合理的。
    • 注意,如果你的URI是一个字符串,你需要用new java.net.URI(the URI)包装它
    • 这个解决方案不是跨平台的,这个线程更好地回答这个问题:How to open the default webbrowser using java
    • @CleberJorgeAmaral 这是跨平台的。您链接到的问题的最佳答案使用与我在此处的答案相同的类。
    【解决方案3】:

    我知道有两种标准方式:

    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();
                }
            }
        }
    });
    

    【讨论】:

    • 只是好奇,但我该如何改进这个答案?
    • saua 说“JEditorPane 有一些 HTML 功能,但它非常有限,不适合通用浏览器。”所以我只使用了更简单的一行代码 saua 发布...我不是想要看起来很漂亮的东西,我只是想把一些功能放在一起
    • 我稍后可能会尝试您的代码,但我没有尝试运行它...所以我不想点击它是一个答案,因为我实际上不知道
    • 好吧,在 saua 发布之前,我也给了你 saua 的方式。这就是最后一句话所指的(我说不清楚了吗?)。
    • 是的,我同时看到了它们,而且他在盒子里有代码,所以它更加突出..我没有意识到你发布了同样的东西..
    【解决方案4】:

    根本没有尝试过,但是lobo browser 中的cobra HTML parser and viewer 是一个用纯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");
      }
    }
    

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 如果您使用运行时执行此操作,您将需要知道用户运行的浏览器。几乎不是最好的选择
        • 因此您检查是否存在 3 个浏览器。我从来没有说过这是最好的选择。
        猜你喜欢
        • 1970-01-01
        • 2015-11-02
        • 1970-01-01
        • 2017-12-12
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        相关资源
        最近更新 更多