有人可以告诉我如何打开默认的网络浏览器并将页面设置为 "www.example.com" 吗?谢谢。
java.awt.Desktop
是您要寻找的类。
import java.awt.Desktop;
import java.net.URI;
// ...
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
Desktop.getDesktop().browse(new URI("http://www.example.com"));
}
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
检查。 - Thibstars对于我来说,使用Desktop.isDesktopSupported()
的解决方案并没有起作用(在Windows 7和Ubuntu上)。请尝试以下方法从Java代码中打开浏览器:
Windows:
Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow.com";
rt.exec("rundll32 url.dll,FileProtocolHandler " + url);
Mac
Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow.com";
rt.exec("open " + url);
Linux:
Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow.com";
String[] browsers = { "google-chrome", "firefox", "mozilla", "epiphany", "konqueror",
"netscape", "opera", "links", "lynx" };
StringBuffer cmd = new StringBuffer();
for (int i = 0; i < browsers.length; i++)
if(i == 0)
cmd.append(String.format( "%s \"%s\"", browsers[i], url));
else
cmd.append(String.format(" || %s \"%s\"", browsers[i], url));
// If the first didn't work, try the next browser and so on
rt.exec(new String[] { "sh", "-c", cmd.toString() });
如果您想要拥有跨平台应用程序,需要添加操作系统检查(例如):
String os = System.getProperty("os.name").toLowerCase();
Windows:
os.indexOf("win") >= 0
Mac:
os.indexOf("mac") >= 0
Linux:
os.indexOf("nix") >=0 || os.indexOf("nux") >=0
这是我的代码。它将在默认浏览器中打开给定的URL(跨平台解决方案)。
import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class Browser {
public static void main(String[] args) {
String url = "http://www.google.com";
if(Desktop.isDesktopSupported()){
Desktop desktop = Desktop.getDesktop();
try {
desktop.browse(new URI(url));
} catch (IOException | URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec("xdg-open " + url);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
java.awt.Desktop
已经提供了这个功能,但需要注意以下细节:
使用isDesktopSupported()方法来确定桌面API是否可用。在Solaris操作系统和Linux平台上,此API依赖于Gnome库。如果这些库不可用,则该方法将返回false。
对于不支持或提供java.awt.Desktop
的平台,请查看BrowserLauncher2项目。它源于Eric Albert最初编写和发布的BrowserLauncher类,并进行了一些更新。我在20世纪初成功地在一个多平台Java应用程序中使用了原始的BrowserLauncher类,该应用程序在本地运行并具有Web浏览器界面。除BrowserLauncher2之外的项目也可能更新了原始的BrowserLauncher,以适应自2001年以来浏览器和默认系统安全设置的更改。此代码的版权所有者为Eric Albert(ejalbert@cs.stanford.edu),版权所有(1999-2001),只要本段落到评论结束的部分未被删除,即可以任何形式重新分发或修改。作者请求被通知使用此代码的任何应用程序、小程序或其他二进制文件,但这更多是出于好奇心而非必需。此软件不包括任何保修。作者对使用此软件造成的任何数据或功能损失或任何不良或意外影响不承担责任。
致谢: Steven Spencer,JavaWorld杂志(Java Tip 66) 还要感谢Ron B. Yeh、Eric Shapiro、Ben Engber、Paul Teitlebaum、Andrea Cantatore、Larry Barowski、Trevor Bedzek、Frank Miedrich和Ron Rabakukk
希望你不介意,我从上面整理了所有有用的东西,并编写出一个完整的类供测试使用...
import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class MultiBrowPop {
public static void main(String[] args) {
OUT("\nWelcome to Multi Brow Pop.\nThis aims to popup a browsers in multiple operating systems.\nGood luck!\n");
String url = "http://www.birdfolk.co.uk/cricmob";
OUT("We're going to this page: "+ url);
String myOS = System.getProperty("os.name").toLowerCase();
OUT("(Your operating system is: "+ myOS +")\n");
try {
if(Desktop.isDesktopSupported()) { // Probably Windows
OUT(" -- Going with Desktop.browse ...");
Desktop desktop = Desktop.getDesktop();
desktop.browse(new URI(url));
} else { // Definitely Non-windows
Runtime runtime = Runtime.getRuntime();
if(myOS.contains("mac")) { // Apples
OUT(" -- Going on Apple with 'open'...");
runtime.exec("open " + url);
}
else if(myOS.contains("nix") || myOS.contains("nux")) { // Linux flavours
OUT(" -- Going on Linux with 'xdg-open'...");
runtime.exec("xdg-open " + url);
}
else
OUT("I was unable/unwilling to launch a browser in your OS :( #SadFace");
}
OUT("\nThings have finished.\nI hope you're OK.");
}
catch(IOException | URISyntaxException eek) {
OUT("**Stuff wrongly: "+ eek.getMessage());
}
}
private static void OUT(String str) {
System.out.println(str);
}
}
import java.awt.Desktop;
import java.net.URI;
public class App {
public static void main(String[] args) throws Exception {
String url = "http://stackoverflow.com";
if (Desktop.isDesktopSupported()) {
// Windows
Desktop.getDesktop().browse(new URI(url));
} else {
// Ubuntu
Runtime runtime = Runtime.getRuntime();
runtime.exec("/usr/bin/firefox -new-window " + url);
}
}
}
/usr/bin/firefox
不是非 Windows 平台上的标准浏览器名称!可能是 Chrome,或 Epiphany,或其他许多浏览器。 - toolforger非常简单,只需编写下面的代码:
String s = "http://www.google.com";
Desktop desktop = Desktop.getDesktop();
desktop.browse(URI.create(s));
如果你不想加载URL,那么可以将你的浏览器名称写入字符串值中,例如:
String s = "chrome";
Desktop desktop = Desktop.getDesktop();
desktop.browse(URI.create(s));
在执行程序后,它会自动打开一个空的URL网页
(defn open-browser
"Open a new browser (window or tab) viewing the document at this `uri`."
[uri]
(if (java.awt.Desktop/isDesktopSupported)
(let [desktop (java.awt.Desktop/getDesktop)]
(.browse desktop (java.net.URI. uri)))
(let [rt (java.lang.Runtime/getRuntime)]
(.exec rt (str "xdg-open " uri)))))
StandaloneHostService
中打包了一种跨平台解决方案,它独立于AWT,与krzysiek.ste的答案有些相似。xdg-open
的替代方案(顺便说一下,这些替代方案实际上是由xdg-open
使用的)。private static final String[][] commands = new String[][]{
{"xdg-open", "$1"},
{"gio", "open", "$1"},
{"gvfs-open", "$1"},
{"gnome-open", "$1"}, // Gnome
{"mate-open", "$1"}, // Mate
{"exo-open", "$1"}, // Xfce
{"enlightenment_open", "$1"}, // Enlightenment
{"gdbus", "call", "--session", "--dest", "org.freedesktop.portal.Desktop",
"--object-path", "/org/freedesktop/portal/desktop",
"--method", "org.freedesktop.portal.OpenURI.OpenURI",
"", "$1", "{}"}, // Flatpak
{"open", "$1"}, // Mac OS fallback
{"rundll32", "url.dll,FileProtocolHandler", "$1"}, // Windows fallback
};
public static void showDocument(final String uri) {
String osName = System.getProperty("os.name");
try {
if (osName.startsWith("Mac OS")) {
Runtime.getRuntime().exec(new String[]{"open", uri});
} else if (osName.startsWith("Windows")) {
Runtime.getRuntime().exec(new String[]{"rundll32", "url.dll,FileProtocolHandler", uri});
} else { //assume Unix or Linux
new Thread(() -> {
try {
for (String[] browser : commands) {
try {
String[] command = new String[browser.length];
for (int i = 0; i < browser.length; i++)
if (browser[i].equals("$1"))
command[i] = uri;
else
command[i] = browser[i];
if (Runtime.getRuntime().exec(command).waitFor() == 0)
return;
} catch (IOException ignored) {
}
}
String browsers = System.getenv("BROWSER") == null ? "x-www-browser:firefox:iceweasel:seamonkey:mozilla:" +
"epiphany:konqueror:chromium:chromium-browser:google-chrome:" +
"www-browser:links2:elinks:links:lynx:w3m" : System.getenv("BROWSER");
for (String browser : browsers.split(":")) {
try {
Runtime.getRuntime().exec(new String[]{browser, uri});
return;
} catch (IOException ignored) {
}
}
} catch (Exception ignored) {
}
}).start();
}
} catch (Exception e) {
// should not happen
// dump stack for debug purpose
e.printStackTrace();
}
}