ฉันจะเปิดลิงค์ในเบราว์เซอร์เริ่มต้นด้วยการคลิกปุ่มตามบรรทัด
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
open("www.google.com"); // just what is the 'open' method?
}
});
เหรอ?
ฉันจะเปิดลิงค์ในเบราว์เซอร์เริ่มต้นด้วยการคลิกปุ่มตามบรรทัด
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
open("www.google.com"); // just what is the 'open' method?
}
});
เหรอ?
คำตอบ:
ใช้เดสก์ท็ # ดู (URI)วิธีการ จะเปิด URI ในเบราว์เซอร์เริ่มต้นของผู้ใช้
public static boolean openWebpage(URI uri) {
Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
try {
desktop.browse(uri);
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
public static boolean openWebpage(URL url) {
try {
return openWebpage(url.toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
}
return false;
}
new ProcessBuilder("x-www-browser", uri.toString());
โดยเรียก คุณจะคิดว่าหากมีข้อ จำกัด ด้านความปลอดภัยการเรียก ProcessBuilder จะไม่ทำงาน แต่มันได้ผล ฉันไม่รู้ว่าทำไมdesktop.browse(uri)
ไม่ทำงาน แต่ฉันเห็นแล้วว่ามันไม่ได้ผลกับคนจำนวนมาก ฉันเดาว่าอาจจะเป็นปัญหาของ Netbeans แต่ฉันไม่รู้
openWebpage
สามารถใช้Runtime.exec(..)
และวนซ้ำผ่านชุดชื่อเบราว์เซอร์ยอดนิยมที่กำหนดไว้ล่วงหน้าโดยส่งผ่าน URL ไป นอกจากนี้ยังมีข้อแม้ที่จะไม่ทำงานสำหรับผู้ใช้ที่มีเบราว์เซอร์ที่คลุมเครือ แต่ฉันจะเขียนและเพิ่มลงในคำตอบนี้ในไม่ช้าเมื่อฉันมีเวลาว่าง
public static void openWebpage(String urlString) {
try {
Desktop.getDesktop().browse(new URL(urlString).toURI());
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Desktop.getDesktop().browse(new URL("http://www.google.com").toURI());
} catch (Exception e) {}
หมายเหตุ: คุณต้องรวมการนำเข้าที่จำเป็นจาก java.net
วิธีการแก้ปัญหาโดยไม่ต้องสภาพแวดล้อม Desktop เป็นBrowserLauncher2 โซลูชันนี้ใช้งานได้ทั่วไปเช่นเดียวกับบน Linux เดสก์ท็อปไม่สามารถใช้ได้ตลอดเวลา
คำตอบเกี่ยวกับความยาวมีอยู่ที่https://stackoverflow.com/a/21676290/873282
private void ButtonOpenWebActionPerformed(java.awt.event.ActionEvent evt) {
try {
String url = "https://www.google.com";
java.awt.Desktop.getDesktop().browse(java.net.URI.create(url));
} catch (java.io.IOException e) {
System.out.println(e.getMessage());
}
}
ฉันรู้ว่านี่เป็นคำถามเก่า แต่บางครั้งDesktop.getDesktop()
ความผิดพลาดที่ไม่คาดคิดเช่นใน Ubuntu 18.04 ดังนั้นฉันต้องเขียนโค้ดของฉันใหม่ดังนี้:
public static void openURL(String domain)
{
String url = "https://" + domain;
Runtime rt = Runtime.getRuntime();
try {
if (MUtils.isWindows()) {
rt.exec("rundll32 url.dll,FileProtocolHandler " + url).waitFor();
Debug.log("Browser: " + url);
} else if (MUtils.isMac()) {
String[] cmd = {"open", url};
rt.exec(cmd).waitFor();
Debug.log("Browser: " + url);
} else if (MUtils.isUnix()) {
String[] cmd = {"xdg-open", url};
rt.exec(cmd).waitFor();
Debug.log("Browser: " + url);
} else {
try {
throw new IllegalStateException();
} catch (IllegalStateException e1) {
MUtils.alertMessage(Lang.get("desktop.not.supported"), MainPn.getMainPn());
e1.printStackTrace();
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
public static boolean isWindows()
{
return OS.contains("win");
}
public static boolean isMac()
{
return OS.contains("mac");
}
public static boolean isUnix()
{
return OS.contains("nix") || OS.contains("nux") || OS.indexOf("aix") > 0;
}
จากนั้นเราสามารถเรียกตัวช่วยนี้ได้จากอินสแตนซ์:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MUtils.openURL("www.google.com"); // just what is the 'open' method?
}
});
public static void openWebPage(String url) {
try {
Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
desktop.browse(new URI(url));
}
throw new NullPointerException();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, url, "", JOptionPane.PLAIN_MESSAGE);
}
}