Java 如何使用SWT浏览器检测internet连接(或处理服务器不可用)

Java 如何使用SWT浏览器检测internet连接(或处理服务器不可用),java,browser,swt,Java,Browser,Swt,我有一个带有SWT浏览器的SWT Java应用程序,它在启动时显示,向用户显示我网站的新闻页面,用户也可以查看“实时”帮助文件 但是,我需要一种方法来检查internet是否不可用,这样我就可以显示帮助和欢迎页面的本地脱机副本 在Mac上,如果没有internet,会弹出一个对话框,说明: “页面加载失败,错误为:无法连接到服务器。” 我想处理这个问题,而不让弹出窗口进入用户(显然这对用户来说很烦人),这样我就可以在出现这种情况时切换页面 谢谢 使用answer for可以检查用户是否已连接到i

我有一个带有SWT浏览器的SWT Java应用程序,它在启动时显示,向用户显示我网站的新闻页面,用户也可以查看“实时”帮助文件

但是,我需要一种方法来检查internet是否不可用,这样我就可以显示帮助和欢迎页面的本地脱机副本

在Mac上,如果没有internet,会弹出一个对话框,说明:

“页面加载失败,错误为:无法连接到服务器。”

我想处理这个问题,而不让弹出窗口进入用户(显然这对用户来说很烦人),这样我就可以在出现这种情况时切换页面

谢谢

使用answer for可以检查用户是否已连接到internet,更类似的是,您的live help已启动并工作。然后,如果连接中断或您的帮助出现故障,您可以显示本地版本

以下是完整的代码(我还使用了浏览器小部件的片段)


当然,请将
NET\u URL
LOCAL\u URL
常量设置为适当的URL。

以下是我完成此操作的方式:

我的代码将替换:

~NOINTERNETURL~具有“默认”本地url(我的SWT浏览器检测本地url并显示相应页面)

~INTERNETURL~如果可以连接到我的服务器,我想访问的页面

~internetesturl~我的服务器上有一个脚本的url,基本上是“var hasneet=true”


如果(HasInternet的类型==='undefined'){
window.location.href=“~NOINTERNETURL~”;
}
否则{
window.location.href=“~INTERNETURL~”;
}
正在测试internet连接。。。
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.UnknownHostException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class BrowserWidget {

    private final String NET_URL = "http://eclipse.org";
    private final String LOCAL_URL = "file:///index.html";
    private String url = "";

    public BrowserWidget() {
        Display display = new Display();
        final Shell shell = new Shell(display);
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 3;
        shell.setLayout(gridLayout);

        final Browser browser;
        try {
            browser = new Browser(shell, SWT.NONE);
        } catch (SWTError e) {
            System.out.println("Could not instantiate Browser: " + e.getMessage());
            display.dispose();
            return;
        }
        GridData data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        data.verticalAlignment = GridData.FILL;
        data.horizontalSpan = 3;
        data.grabExcessHorizontalSpace = true;
        data.grabExcessVerticalSpace = true;
        browser.setLayoutData(data);

        shell.open();

        if(isInternetReachable()) browser.setUrl(NET_URL);
        else browser.setUrl(LOCAL_URL);

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    private boolean isInternetReachable() {
        HttpURLConnection urlConnect = null;

        try {
            // make a URL to a known source
            URL url = new URL(NET_URL);
            // open a connection to that source
            urlConnect = (HttpURLConnection) url.openConnection();
            // trying to retrieve data from the source. If there is no connection, this line will fail
            urlConnect.getContent();
        } catch (UnknownHostException e) {
            return false;
        } catch (IOException e) {
            return false;
        } finally {
            // cleanup
            if(urlConnect != null) urlConnect.disconnect();
        }
        return true;
    }

    public static void main(String[] args) {
        new BrowserWidget();
    }
}
<html>
<head>
<meta http-equiv="refresh" content="5;url=~NOINTERNETURL~">
</head>
<body>
<script src="~INTERNETTESTURL~" type="text/javascript"></script>
<script type="text/javascript">

    if (typeof HasInternet === 'undefined') {
        window.location.href = "~NOINTERNETURL~";
    }
    else {
        window.location.href = "~INTERNETURL~";
    }

</script>
<div>
    Testing internet connection...
</div>
</body>
</html>