【发布时间】:2010-10-19 10:22:52
【问题描述】:
有没有一种简单的方法可以在 GUI 的 JPanel 中打开网页?
如果没有,如何使用计算机的默认网络浏览器打开网页?
我希望我可以用不到 20 行代码来做一些事情,并且最多需要创建一个类。 20 没有理由,只是希望代码少......
我打算打开一个游戏指南。该指南是在线的并且有多个页面,但是页面之间是相互链接的,所以我希望我只需要用我的代码调用一个 URL。
【问题讨论】:
有没有一种简单的方法可以在 GUI 的 JPanel 中打开网页?
如果没有,如何使用计算机的默认网络浏览器打开网页?
我希望我可以用不到 20 行代码来做一些事情,并且最多需要创建一个类。 20 没有理由,只是希望代码少......
我打算打开一个游戏指南。该指南是在线的并且有多个页面,但是页面之间是相互链接的,所以我希望我只需要用我的代码调用一个 URL。
【问题讨论】:
请尝试以下代码:
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();
}
【讨论】:
使用默认网络浏览器打开网页很容易:
java.awt.Desktop.getDesktop().browse(theURI);
嵌入浏览器并不容易。 JEditorPane 有一些 HTML 能力(如果我没记错我有限的 Swing 知识的话),但它非常有限,不适合通用浏览器。
【讨论】:
new java.net.URI(the URI)包装它
我知道有两种标准方式:
JEditorPane 组件Desktop.getDesktop().browse(URI) 打开用户的默认浏览器(Java 6 或更高版本)
很快,还会有第三个:
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();
}
}
}
});
【讨论】:
根本没有尝试过,但是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");
}
}
【讨论】:
如果您正在开发小程序,您可以使用AppletContext.showDocument。那将是一个单行:
getAppletContext().showDocument("http://example.com", "_blank");
如果您正在开发桌面应用程序,您可以尝试Bare Bones Browser Launch。
【讨论】:
我不知道这样的内置函数是否存在,但我会使用 Runtime 类的 exec 和 iexplore.exe 或 firefox.exe 作为参数。
【讨论】: