Как реализовать диспетчер приложений с одним экземпляром в Java (CVM PhoneME)? - PullRequest
2 голосов
/ 21 мая 2010

Я работаю над менеджером приложений для встроенной платформы на основе виртуальной машины CVM PhoneME. ВМ запускается приложением C ++, которое настраивает CVM, а затем запускает саму ВМ. Это приложение C ++ называется из командной строки, передавая имя основного класса и путь к классу Java-приложения. Существует основное Java-приложение (назовем его Manager), которое загружает приложение с помощью загрузчиков классов. Я хочу, чтобы этот менеджер был приложением с одним экземпляром, чтобы он мог отслеживать все работающие приложения.

Другими словами: при первом запуске приложения (например, app1) запускается виртуальная машина, а менеджер загружает приложение1. При последующих вызовах для загрузки других приложений (app2, app3 и т. Д.) Этот же экземпляр Manager будет загружать эти приложения.

Менеджер работает нормально, за исключением того факта, что это не единственный экземпляр.

Можно ли делать то, что я хочу?

Я нашел это: http://www.knowledgesutra.com/forums/topic/59760-how-to-implement-single-instance-application-on-java/

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

1 Ответ

1 голос
/ 21 мая 2010

Существуют различные способы принудительного применения одного экземпляра приложения. Например, Firefox использует файл блокировки.

Один из самых распространенных способов, которые я видел, - запускать «менеджер» независимо, но при запуске попытайтесь открыть ServerSocket на каком-либо порту, прослушивая соединения.

Если вы не можете открыть сокет, вы знаете, что вы не одиночный экземпляр. Поэтому вместо запуска приложения подключите к сокету прослушивания и отправьте ему аргументы программы.

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

Редактировать: описывает процесс в не-ME среде. Не будучи разработчиком ME, я не могу комментировать его возможности по телефону.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...