java - 如何使用SWT浏览器检测互联网连接(或处理服务器不可用)

标签 java browser swt

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

但是,我需要一种方法来检查互联网是否不可用,以便我可以显示帮助和欢迎页面的本地离线副本。

在 Mac 上,如果没有互联网,则会弹出一个对话框,指出:

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

我想在不向用户弹出窗口的情况下处理此问题(显然这对用户来说很烦人),因此我可以在发生这种情况时切换页面。

谢谢!

最佳答案

使用 Detect internet Connection using Java 的答案您可以检查用户是否已连接到互联网,或者您的实时帮助是否已启动并正在运行。然后,如果连接断开或您的帮助出现故障,您可以显示本地版本。

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

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

当然,请将 NET_URLLOCAL_URL 常量设置为适当的 URL。

关于java - 如何使用SWT浏览器检测互联网连接(或处理服务器不可用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067844/

相关文章:

java - 访问Hashmap中的Hashmap,并以某种格式打印出来

silverlight - 用户按下浏览器刷新按钮后如何维护 Silverlight 应用程序状态?

c# - wpf web 浏览器控件的限制是什么?

java - 我可以组合 SWT GridLayout 和 FillLayout 吗

java - ReadyState 保持为空

java - Apache VFS 的 SSH URI 错误

java - 有没有一个工具可以按提交日期和提交人员查看 Subversion 中所有项目的 checkin 情况

javascript - 模拟 navigator.mediaDevices.enumerateDevices

java - 将合成导出为图像,与屏幕分辨率无关

java - Java SWT MVC/其他 GUI 设计模式的任何简单代码示例