เปิดลิงค์ในเบราว์เซอร์ด้วยปุ่ม java? [ซ้ำ]


103

ฉันจะเปิดลิงค์ในเบราว์เซอร์เริ่มต้นด้วยการคลิกปุ่มตามบรรทัด

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        open("www.google.com"); // just what is the 'open' method?
    }
});

เหรอ?


2
คุณอาจได้ลองดูJavaDocs สำหรับคลาสที่ใช้ในคำตอบที่ยอมรับของคำถามสุดท้ายของคุณ! เอกสารเหล่านั้น มีประโยชน์มากไม่ว่าจะแนบกับ IDE ของคุณหรือบุ๊กมาร์กเวอร์ชันออนไลน์
Andrew Thompson

คำถามซ้ำซ้อน: stackoverflow.com/q/5226212/873282
koppor

คำตอบ:


223

ใช้เดสก์ท็ # ดู (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;
}

ดูเหมือนว่าจะไม่ทำงานในไฟล์ JAR ที่สร้างโดย Netbeans 7.x. ใช้งานได้เมื่อมีการเรียกใช้โค้ดจาก Netbeans แต่ไม่ใช่เมื่อปรับใช้เป็นไฟล์ JAR ... อย่างน้อยก็ในประสบการณ์ของฉัน ฉันยังคงมองหาวิธีแก้ปัญหา
MountainX

@MountainX Debug และตรวจสอบว่าเดสก์ท็อปได้รับการสนับสนุนและการใช้งานด้านความปลอดภัยไม่ได้ จำกัด ไม่ให้คุณเข้าถึงอินสแตนซ์เดสก์ท็อป หากคุณเรียกใช้ JAR เป็นแอพเพล็ตการรักษาความปลอดภัยน่าจะเป็นตัวการ
FThompson

@ วัลแคน - ฉันไม่ได้ใช้งาน JAR เป็นแอพเพล็ต ฉันไม่ทราบถึงการตั้งค่าความปลอดภัยใด ๆ ที่จะทำให้ไม่สามารถใช้งานได้ ฉัน "ทำงานรอบ" new ProcessBuilder("x-www-browser", uri.toString());โดยเรียก คุณจะคิดว่าหากมีข้อ จำกัด ด้านความปลอดภัยการเรียก ProcessBuilder จะไม่ทำงาน แต่มันได้ผล ฉันไม่รู้ว่าทำไมdesktop.browse(uri)ไม่ทำงาน แต่ฉันเห็นแล้วว่ามันไม่ได้ผลกับคนจำนวนมาก ฉันเดาว่าอาจจะเป็นปัญหาของ Netbeans แต่ฉันไม่รู้
MountainX

หากผู้ใช้กำหนดแอ็คชัน "open with" ที่กำหนดเองให้กับไฟล์ exten เช่น "html" สิ่งนี้จะไม่เปิดเบราว์เซอร์ แต่โปรแกรมที่ผู้ใช้เชื่อมโยงด้วย .... นี่ไม่ใช่วิธีแก้ปัญหาเลย!
thesaint

@thesaint จุดที่ดี; อีกทางเลือกหนึ่งopenWebpageสามารถใช้Runtime.exec(..)และวนซ้ำผ่านชุดชื่อเบราว์เซอร์ยอดนิยมที่กำหนดไว้ล่วงหน้าโดยส่งผ่าน URL ไป นอกจากนี้ยังมีข้อแม้ที่จะไม่ทำงานสำหรับผู้ใช้ที่มีเบราว์เซอร์ที่คลุมเครือ แต่ฉันจะเขียนและเพิ่มลงในคำตอบนี้ในไม่ช้าเมื่อฉันมีเวลาว่าง
FThompson


25
try {
    Desktop.getDesktop().browse(new URL("http://www.google.com").toURI());
} catch (Exception e) {}

หมายเหตุ: คุณต้องรวมการนำเข้าที่จำเป็นจาก java.net


5

วิธีการแก้ปัญหาโดยไม่ต้องสภาพแวดล้อม Desktop เป็นBrowserLauncher2 โซลูชันนี้ใช้งานได้ทั่วไปเช่นเดียวกับบน Linux เดสก์ท็อปไม่สามารถใช้ได้ตลอดเวลา

คำตอบเกี่ยวกับความยาวมีอยู่ที่https://stackoverflow.com/a/21676290/873282


3
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());
    }
}

0

ฉันรู้ว่านี่เป็นคำถามเก่า แต่บางครั้ง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?
    }
});

0
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);
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.