2010-11-08 9 views
5

Я работаю в настольном приложении, созданном в java. мы работаем над версией Windows (для работы на Windows O.S.) приложения. Когда мы запустим наше приложение, оно создает иконку в трее на рабочем столе с помощью SystemTray вСоздание единого экземпляра для системного трея в java

SystemTray tray = SystemTray.getSystemTray(); 

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

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

Я хочу, чтобы в моем приложении на рабочем столе присутствовал только один значок в трее, и он работал как служба. этот значок должен удаляться только при удалении приложения. Он должен работать как служба в фоновом режиме.

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

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

Спасибо за ваши ценные предложения заранее.

ответ

2

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

Для части «услуги» вы можете скрыть основное окно при запуске, поэтому ваше приложение будет работать, как если бы это была служба Windows.

+0

Спасибо за ответ, я надеюсь, что это сработает для меня. Пожалуйста, уточните еще кое-что для части обслуживания. – Toman

+0

Я не думаю, что можно создать службу Windows в Java, то есть услугу, которая может автоматически запускаться при запуске и которая может управляться, как и другие стандартные службы Windows. Но вы можете сделать что-то подобное, добавив запись в реестр (например, «автоматический запуск Windows»). Когда ваша программа запущена, она проверяет, работает ли другой экземпляр. Если нет, он создаст значок в системном трее, как вы хотите, и спрячьте его окна (если на самом деле он использует какой-то графический интерфейс). –

1

Сделайте заявку Single Instance. И, пожалуйста, расскажите, как вы делаете .EXE-файл на Java?

+0

Спасибо, что ответил Mudassir. Я создаю exe, используя расширенный установщик. Усовершенствованный установщик использует jar-файлы и создает exe из банки. – Toman

1

Для отображения значка в лотке ваше приложение должно работать. Если значок вашего лотка отображается там дважды (или больше), то ваше приложение запускается несколько раз. Вы должны добавить чек для себя самостоятельно.

Вы не хотите запускать свое приложение в качестве службы Windows, так как обычно у них нет доступа к рабочему столу Windows.

+0

Вы не хотите запускать свое приложение в качестве службы Windows, так как обычно у них нет доступа к Windows Desktop. Может быть, Toman пытается создать программу антивирусного типа, которая работает в фоновом режиме и показывает свое присутствие через значок «Системный трей». – Mudassir

+0

@ Mudassir В этом случае он должен сделать из него два приложения. Один для службы фоновых окон и второй, который подключается через сеть или sthg else. – ZeissS

+0

Спасибо за ваши комментарии. Мое приложение предназначено для онлайн-резервного копирования. Он берет резервную копию выбранных файлов и обновлений автоматически на сервере, поэтому требуется, чтобы она выполнялась как служба в фоновом режиме. Я создаю отдельный экземпляр для системного трея в основном классе приложения, но мое приложение не может определить, присутствует ли какой-либо экземпляр или нет. – Toman