Ai đó có thể chỉ cho tôi đúng hướng về cách mở trình duyệt web mặc định và đặt trang thành "www.example.com" không, cảm ơn
Ai đó có thể chỉ cho tôi đúng hướng về cách mở trình duyệt web mặc định và đặt trang thành "www.example.com" không, cảm ơn
Câu trả lời:
java.awt.Desktop
là lớp học mà bạn đang tìm kiếm.
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)
séc để thay thế.
Đây là mã của tôi. Nó sẽ mở url nhất định trong trình duyệt mặc định (giải pháp đa nền tảng).
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();
}
}
}
}
Đối với tôi, giải pháp với Desktop.isDesktopSupported()
không hoạt động ( windows 7 và ubuntu ). Vui lòng thử cách này để mở trình duyệt từ mã java:
Các cửa sổ:
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 = { "epiphany", "firefox", "mozilla", "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() });
Nếu bạn muốn có ứng dụng đa nền, bạn cần thêm kiểm tra hệ thống hoạt động (ví dụ):
String os = System.getProperty("os.name").toLowerCase();
Các cửa sổ:
os.indexOf("win") >= 0
Mac:
os.indexOf("mac") >= 0
Linux:
os.indexOf("nix") >=0 || os.indexOf("nux") >=0
xdg-open
tốt hơn nhiều trong trường hợp này. Do đó, giải pháp có thể đơn giản như macOS.
Bạn cũng có thể sử dụng Runtime để tạo giải pháp nền tảng chéo:
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);
}
}
}
Như đã lưu ý trong câu trả lời do Tim Cooper java.awt.Desktop
cung cấp , đã cung cấp khả năng này kể từ phiên bản Java 6 (1.6), nhưng với cảnh báo sau:
Đối với các nền tảng không hỗ trợ hoặc cung cấp java.awt.Desktop
, hãy xem xét dự án BrowserLauncher2 . Nó có nguồn gốc và phần nào được cập nhật từ lớp BrowserLauncher do Eric Albert viết và phát hành ban đầu. Tôi đã sử dụng thành công lớp BrowserLauncher gốc trong một ứng dụng Java đa nền tảng chạy cục bộ với giao diện trình duyệt web vào đầu những năm 2000.
Lưu ý rằng BrowserLauncher2 được cấp phép theo Giấy phép Công cộng Nhỏ hơn GNU . Nếu giấy phép đó không được chấp nhận, hãy tìm bản sao của BrowserLauncher gốc có giấy phép rất tự do:
Mã này là Bản quyền 1999-2001 của Eric Albert (ejalbert@cs.stanford.edu) và có thể được phân phối lại hoặc sửa đổi dưới bất kỳ hình thức nào mà không có giới hạn miễn là phần nhận xét này từ đoạn này đến cuối nhận xét không bị xóa . Tác giả yêu cầu anh ta được thông báo về bất kỳ ứng dụng, applet hoặc tệp nhị phân nào khác sử dụng mã này, nhưng điều đó vì tò mò hơn bất cứ điều gì và không bắt buộc. Phần mềm này không bao gồm bảo hành. Tác giả không chịu trách nhiệm về bất kỳ mất mát dữ liệu hoặc chức năng nào hoặc bất kỳ ảnh hưởng xấu hoặc không mong muốn nào của việc sử dụng phần mềm này.
Tín dụng: Steven Spencer, tạp chí JavaWorld (Java Mẹo 66) Cũng xin cảm ơn Ron B. Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore, Larry Barowski, Trevor Bedzek, Frank Miedrich và Ron Rabakukk
Các dự án khác ngoài BrowserLauncher2 cũng có thể đã cập nhật BrowserLauncher gốc để giải thích cho những thay đổi trong cài đặt bảo mật hệ thống và trình duyệt mặc định kể từ năm 2001.
Nó rất đơn giản chỉ cần viết mã dưới đây:
String s = "http://www.google.com";
Desktop desktop = Desktop.getDesktop();
desktop.browse(URI.create(s));
hoặc nếu bạn không muốn tải URL thì chỉ cần viết tên trình duyệt của bạn thành các giá trị chuỗi như,
String s = "chrome";
Desktop desktop = Desktop.getDesktop();
desktop.browse(URI.create(s));
nó sẽ tự động mở trình duyệt với URL trống sau khi thực hiện một chương trình
trên windows gọi "cmd / k start http://www.example.com " Infact bạn luôn có thể gọi các chương trình "mặc định" bằng cách sử dụng lệnh start. Đối với ex start, abc.mp3 sẽ gọi trình phát mp3 mặc định và tải tệp mp3 được yêu cầu.
Hy vọng bạn không phiền nhưng tôi đã tổng hợp lại tất cả những thứ hữu ích, từ phía trên, và đưa ra một lớp hoàn chỉnh sẵn sàng để kiểm tra ...
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);
}
}
Tôi đúc lại câu trả lời của Brajesh Kumar ở trên vào Clojure như sau:
(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)))))
trong trường hợp nó hữu ích cho bất kỳ ai.