![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Добрый день.. Есть задача,сделать так что бы при втором запуске java-приложение, оно блокировалось и перекидывало фокус на уже открытое ..
Разделил на два этапа 1)НЕ допустить запуска второй копии 2)Перебросить фокус 1)Почитал в интернете и тут, нашел два способа, это занимать порт и лочить файл.Т.к я и так занимаю порт под нужные цели, первым вариантом пользоваться не хочется . 2 )Нашел в интернете такую реализацию:
НО что в винде что в линуксе,всё время пишет что файл(ТХТ) залочен,т.е уходит на исключение Что тут не так? 2)Можно ли вообще сделать фокусировку на приложение программно? |
|||
|
||||
Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Первый вопрос решил)
|
|||
|
||||
Su_ |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
По поводу первого пункта, может кому пригодится:
В начало программы:
методы
Работает и в win и в lin, при чем: В винде блокирует файлы нормально, в Линуксе файл не блокирует , но повторно войти в
не может. Для этого еще есть проверка флага block. Почему не блокирует файл я так и не понял, но это работает. Осталось разворачивать уже запущенное приложение вместо запуска ещё одной копии (lin) ??? |
||||||
|
|||||||
Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
увы этот алгоритм дает сбой в Linux.. отсюда вопрос как заблокировать файл в linux?????????7
|
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
Thread t = new Thread() {
public void run() { new FileInputStream("zzz").getChannel().tryLock(); } }; t.start(); t.join(100);//даём 100 ms на захват лока. try { t.interrupt(); } catch (Exception e) { //обработка } Это сообщение отредактировал(а) dobrolub - 12.1.2010, 03:00 |
|||
|
||||
Su_ |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
если это повесить на кнопку
вылетает на исключение ,при чем не на IOException А вообще линукс поддерживает блокировку файлов? Добавлено через 6 минут и 25 секунд для запуска
после запуска
Я не очень понимаю,почему в винде блокирует нормально,а в линуксе нет.? |
||||||
|
|||||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
Возможно баг в JDK, но вроде с помощью exception всё можно отследить как я понял.
|
|||
|
||||
Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
к сожалению нет. суть то основываться на блокировки файла , если залочен ,значит одна копия запущена, а так как в Linux он их не лочит, этого не сделать, походу придется на порт вешать.,хотя писали что это далеко не самое лучше решение! dobrolub спасибо)
|
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
так получается что не за что :(
слушай а что за JDK / Linux? |
|||
|
||||
Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
java-1.6.0-openJDK уже стояло на мое MandrivaFree2009. Я думаю тут различие идет по возможности lock/unlock по ОС а не по JDK
|
|||
|
||||
dobrolub |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
на debian 5 с JDK от Sun.
java version "1.6.0_07" Java SE Runtime Environment (build 1.6.0_07-b06) Java HotSpot Client VM (build 10.0-b23, mixed mode, sharing) код внизу отработал нормально.
первый запуск:
второй - параллельный запуск
Добавлено через 13 минут и 39 секунд проверил с версией 1.5 - тоже работает. То есть возможно проблема в JDK java version "1.5.0_16" Java 2 Runtime Environment, Standard Edition (build 1.5.0_16-b02) Java HotSpot Client VM (build 1.5.0_16-b02, mixed mode, sharing) Это сообщение отредактировал(а) dobrolub - 12.1.2010, 04:27 |
||||||
|
|||||||
Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
ого Спасибо, это важно для меня ..поковыряюсь с JDK)
Добавлено через 9 минут и 5 секунд Слушай у меня такой же вывод выдает теперь.. может я где то напортачил ,надо больше спать) Спасибо большое ! |
|||
|
||||
Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
токо не понял почему он в дальнейшем сбрасывает Lock , если в этом же потоке работать с файлами)
|
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
я думаю что lock сбрасывается когда переменные выходят из области видимости и собираются мусорщиком.
Лучше бы переменные связанные с этим локом положить в новую thread и добавить её kak shutdownHook Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { //освободить локи, закрыть выходные потоки. } }); |
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
>1)Почитал в интернете и тут, нашел два способа, это занимать порт и лочить файл.Т.к я и так занимаю порт под нужные цели, первым вариантом пользоваться не хочется
Я про порт не понял, с ним железней, в общем-то, тем более он так и так должен выделиться системой. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |