【发布时间】:2011-03-07 22:48:14
【问题描述】:
有人能给我指出如何打开默认网络浏览器并将页面设置为“www.example.com”的正确方向吗
【问题讨论】:
标签: java
有人能给我指出如何打开默认网络浏览器并将页面设置为“www.example.com”的正确方向吗
【问题讨论】:
标签: java
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) 检查。
对我来说,Desktop.isDesktopSupported() 的解决方案不起作用(windows 7 和 ubuntu)。请尝试通过 java 代码打开浏览器:
窗户:
Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow.com";
rt.exec("rundll32 url.dll,FileProtocolHandler " + url);
苹果机
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();
窗户:
os.indexOf("win") >= 0
苹果机:
os.indexOf("mac") >= 0
Linux:
os.indexOf("nix") >=0 || os.indexOf("nux") >=0
【讨论】:
xdg-open 会好得多。因此,解决方案可以像 macOS 一样简单。
这是我的代码。它将在默认浏览器中打开给定的 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();
}
}
}
}
【讨论】:
正如 Tim Cooper 提供的答案中所述,java.awt.Desktop 自 Java 版本 6 (1.6) 起就提供了此功能,但有以下警告:
对于不支持或不提供java.awt.Desktop 的平台,请查看BrowserLauncher2 项目。它是从最初由 Eric Albert 编写和发布的 BrowserLauncher 类派生并有所更新的。在 2000 年代初期,我在一个多平台 Java 应用程序中成功地使用了原始 BrowserLauncher 类,该应用程序通过 Web 浏览器界面在本地运行。
请注意,BrowserLauncher2 在GNU Lesser General Public License 下获得许可。如果该许可证不可接受,请查找具有非常宽松许可证的原始 BrowserLauncher 的副本:
此代码是 Eric Albert (ejalbert@cs.stanford.edu) 的版权所有 1999-2001,并且可以不受限制地以任何形式重新分发或修改,只要此评论的部分从本段到评论末尾没有被删除。作者要求通知他使用此代码的任何应用程序、applet 或其他二进制文件,但这更多是出于好奇而不是必需的。本软件不提供任何担保。作者对任何数据或功能丢失或使用此软件的任何不利或意外影响概不负责。
学分: 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
BrowserLauncher2 以外的项目也可能更新了原始 BrowserLauncher,以应对自 2001 年以来浏览器和默认系统安全设置的更改。
【讨论】:
您还可以使用 Runtime 创建跨平台解决方案:
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 或许多其他浏览器。
希望你不介意,但我从上面拼凑了所有有用的东西,并提出了一个完整的课程,准备好进行测试......
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);
}
}
【讨论】:
很简单,写下面的代码:
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打开浏览器
【讨论】:
我将上面Brajesh Kumar的答案改写为Clojure,如下所示:
(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)))))
如果它对任何人有用。
【讨论】:
在 Windows 上调用“cmd /k start http://www.example.com” 事实上,您总是可以使用 start 命令调用“默认”程序。 对于 ex start abc.mp3 将调用默认的 mp3 播放器并加载请求的 mp3 文件。
【讨论】: