자바 버튼으로 브라우저에서 링크를여시겠습니까? [복제]


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

답변:


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;
}

Netbeans 7.x에서 만든 JAR 파일에서는 작동하지 않는 것 같습니다. 코드가 Netbeans에서 실행될 때 작동하지만 JAR 파일로 배포 될 때는 작동하지 않습니다. 나는 여전히 해결책을 찾고 있습니다.
MountainX

@MountainX 디버그하고 데스크톱이 지원되는지 확인하고 보안 구현이 데스크톱 인스턴스 액세스를 제한하지 않는지 확인합니다. JAR을 애플릿으로 실행하는 경우 보안이 주범 일 수 있습니다.
FThompson

@Vulcan-JAR을 애플릿으로 실행하지 않습니다. 이 작동을 방해하는 보안 설정을 알지 못합니다. 을 (를) 호출하여 "해결"했습니다 new ProcessBuilder("x-www-browser", uri.toString());. 보안 제한이 있으면 ProcessBuilder 호출이 작동하지 않을 것이라고 생각할 것입니다. 하지만 작동합니다. 왜 desktop.browse(uri)작동하지 않는지 모르겠지만 많은 사람들에게 작동하지 않는 것을 보았습니다. Netbeans 문제일지도 모르지만 모르겠습니다.
MountainX

사용자가 "html"과 같은 파일 확장명에 사용자 정의 "연결 프로그램"동작을 할당 한 경우 브라우저는 열리지 않지만 사용자가 링크 한 프로그램은 열리지 않습니다 .... 이것은 전혀 해결책이 아닙니다!
thesaint

@thesaint 그레이트 포인트; 대안 openWebpageRuntime.exec(..)미리 정의 된 인기있는 브라우저 이름 집합을 사용 하고 반복하여 URL을 전달할 수 있습니다. 그것은 또한 모호한 브라우저를 사용하는 사용자를 위해 실행되지 않는다는 경고가 있지만, 여유 시간이 생기면 곧이 답변에 작성하여 추가하겠습니다.
FThompson

37
public static void openWebpage(String urlString) {
    try {
        Desktop.getDesktop().browse(new URL(urlString).toURI());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

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

참고 : 필요한 가져 오기를 포함해야합니다. java.net



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.