Как обнаружить интернет-соединение с браузером SWT (или обработать сервер недоступен) - PullRequest
1 голос
/ 15 августа 2011

У меня есть приложение SWT Java с браузером SWT, которое отображается при запуске для отображения пользователю страницы новостей моего веб-сайта, а также позволяет пользователю просматривать «живые» файлы справки.

ОднакоМне нужен способ проверить, не доступен ли Интернет, чтобы я мог отобразить локальную автономную копию страниц справки и приветствия.

На Mac появляется диалоговое окно, если нет интернета, с указанием:

"Загрузка страницы завершилась с ошибкой: не удалось подключиться к серверу."

Я бы хотел обработать это без всплывающего окна пользователя (очевидно, это раздражает пользователя) и такЯ могу переключить страницу, когда это произойдет.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Используя ответ для Определить подключение к Интернету с помощью 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_URL и LOCAL_URL на соответствующие URL-адреса ..

0 голосов
/ 19 августа 2011

Вот как я это сделал:

Мой код заменяет:

~ NOINTERNETURL ~ на локальный URL «по умолчанию» (мой браузер SWT обнаруживает локальные URL и отображает соответствующие страницы)

~ INTERNETURL ~ со страницей, на которую я хочу перейти, если я могу подключиться к своему серверу

~ INTERNETTESTURL ~ с URL-адресом скрипта на моем сервере, который в основном равен "var HasInternet = true"

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...