запуск и закрытие собственного браузера, который указывает на веб-приложение - PullRequest
1 голос
/ 23 июня 2011

Привет, добрый человек, переполнение стека, У меня есть бизнес-проблема, и я хотел бы получить некоторые ответы / указания / идеи о том, как ее решить. возможно, это было упомянуто в какой-то другой теме, но до сих пор я искал в Интернете, но не смог найти прямой ответ ..

Бизнес-проблема. Один из наших клиентов хотел бы иметь веб-приложение на Java, но запускать его как настольное приложение. т. е. клиент хотел бы дважды щелкнуть значок где-нибудь на своем рабочем столе и запустить окно браузера, указывающее на URL / контекст веб-приложения, которое будет работать локально на сервере Jetty, который получит запускается, когда пользователь нажимает на иконку.

До сих пор я выяснил, как упаковать свое приложение и создать программу запуска exe (используя install4j) (в основном я создал исполняемый файл JAR с сервером Jetty и мое веб-приложение, упакованное вместе с классом запуска, который запустит сервер Jetty и укажите на контекст веб-приложения).

Моя проблема в том, что я понятия не имею, как запустить (собственный) веб-браузер и указать ему URL-адрес / контекст веб-приложения.

Я нашел этот код, который запускает браузер пользователя по умолчанию:

String url = "http://www.google.com";
java.awt.Desktop.getDesktop().browse(java.net.URI.create(url));

что хорошо, но недостаточно хорошо. и причина его недостаточно хороша в том, что когда пользователь закрывает браузер, сервер Jetty все равно будет работать на заднем плане. Я хочу, чтобы, когда пользователь закрывал браузер, я также хотел обнаружить это событие и закрыть сервер Jetty (без использования какого-либо активного X или JavaScript, пожалуйста)

Кто-то упомянул о создании JPanel и включил в него собственный браузер с использованием некоторого нативного API свинга DJ, но я понятия не имею, как это сделать.

Есть идеи?

Большое спасибо заранее

Ответы [ 3 ]

1 голос
/ 23 июня 2011

Вот кусок кода просто к вашему сведению. Вы можете подключить собственный браузер к процессу и вернуть объект Java-процесса в свой Java-код. Вы можете вызвать метод processObject.waitFor(), чтобы дождаться завершения вызванного процесса.

Launcher:

public class Launcher implements Runnable {

    public void run() {
        Process p;
        try {
            p = Runtime.getRuntime().exec("notepad.exe");
            p.waitFor();

            // Do something after the forked process terminates
            System.out.println("The browser is exit");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Основной класс:

public class TestProcess {

    public static void main(String[] args) throws Exception {
        new Thread(new Launcher()).run();
    }

}
0 голосов
/ 08 мая 2017

Попробуйте

java.awt.Desktop.getDesktop().browse(java.net.URI.create(URL));

URL - // ваш URL

откроет браузер по умолчанию.Надеюсь, что это работает других ОС.

0 голосов
/ 28 июня 2011

Хорошо, мне удалось найти то, что я ищу, поэтому я публикую свои результаты здесь для тех, кто может найти эту информацию полезной.Есть только два решения, которые я мог бы использовать:

  1. Есть что-то под названием BareBoneBrowser. Проверьте ссылку проекта здесь

    этот проект позволяетзапустить браузер пользователя по умолчанию на любой платформе (Windows, Mac OS, Linux), что именно то, что я хотел.и я попробовал это, и, кажется, работает нормально.Есть несколько ограничений (вы не можете определить, были ли закрыты окна браузера пользователем. Возможно, есть способ, если у вас есть время понять код и изменить его), но это быстрый способ запустить браузер.с Java и в то же время является кроссплатформенным.

  2. Другое решение, которое я нашел, это DJ Project нажмите здесь, чтобы открыть домашнюю страницу проекта

    Это почти полное решение, которое позволяет вам открыть «нативный» браузер в JPanel.Кроссплатформенность (работает для Windows и Mac OS или даже Linux).Поскольку браузер запускается внутри JPanel, вы можете определить, когда пользователь «закрывает» JPanel и завершает работу приложения, чтобы затем вы могли делать то, что вам нужно, чтобы завершить работу / завершить или остановить приложение и выполнить любые необходимые действия по очистке.

Надеюсь, что это поможет любому, кто хочет сделать что-то подобное.Мой совет - просто скачайте код и начните играть с ним или сделайте небольшой проект POC (Proof Of Concept), чтобы лучше понять API.

Cheers.

...