По какой-то причине это решение, предотвращающее запуск нескольких экземпляров приложения, больше не работает. Что случилось?
Я ожидаю, что при втором запуске этого приложения будет напечатано: «еще один экземпляр запущен» и остановится с ошибкой, но этого не происходит. Второй экземпляр работает так же, как и первый.
import java.io.File;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.StandardOpenOption;
public class JustOneTest {
public static void main(String[] args) {
runCheck();
while (true) {
try {
System.out.print(".");
Thread.sleep(5 * 60);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static void runCheck() {
System.out.println("start check: is app running");
final File file = new File(System.getProperty("user.home"), "khf.lock");
try {
FileLock lock;
try (FileChannel fc = FileChannel.open(file.toPath(),
StandardOpenOption.CREATE,
StandardOpenOption.WRITE)) {
lock = fc.tryLock();
}
if (lock == null) {
System.out.println("another instance is running");
throw new Error("another instance is running");
}
System.out.println(lock);
// output: sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive invalid]
} catch (IOException e) {
throw new Error(e);
}
System.out.println("start check completed");
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -a-file-is
Запретить запуск нескольких экземпляров Java-приложения путем блокировки файла не работает ⇐ JAVA
Программисты JAVA общаются здесь
1727516863
Anonymous
По какой-то причине это решение, предотвращающее запуск нескольких экземпляров приложения, больше не работает. Что случилось?
Я ожидаю, что при втором запуске этого приложения будет напечатано: «еще один экземпляр запущен» и остановится с ошибкой, но этого не происходит. Второй экземпляр работает так же, как и первый.
import java.io.File;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.StandardOpenOption;
public class JustOneTest {
public static void main(String[] args) {
runCheck();
while (true) {
try {
System.out.print(".");
Thread.sleep(5 * 60);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static void runCheck() {
System.out.println("start check: is app running");
final File file = new File(System.getProperty("user.home"), "khf.lock");
try {
FileLock lock;
try (FileChannel fc = FileChannel.open(file.toPath(),
StandardOpenOption.CREATE,
StandardOpenOption.WRITE)) {
lock = fc.tryLock();
}
if (lock == null) {
System.out.println("another instance is running");
throw new Error("another instance is running");
}
System.out.println(lock);
// output: sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive invalid]
} catch (IOException e) {
throw new Error(e);
}
System.out.println("start check completed");
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79033797/prevent-launching-multiple-instances-of-a-java-application-by-locking-a-file-is[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия