Как прекратить работу программы java

Делаю контрольный проект в Java, в котором нужно симулировать игру. Бросаются кости, и в зависимости от полученного результата игра либо заканчивается, либо опять бросаются кости. Мне бы хотелось иметь возможность приостановки игры. Чтобы процесс останавливался и продолжался дальше после нажатия любой (или определенной) клавиши.

Как я могла бы это реализовать? Подскажите, пожалуйста.

Заранее благодарна за ответы.

Пользователь
Регистрация: 15.12.2010
Сообщений: 78

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

Пользователь
Регистрация: 24.06.2011
Сообщений: 15

Спасибо большое за ответ.

Дело в том, что я вообще-то только на первом семестре, чайник, короче. Была бы рада, если бы вы мне смогли написать про вот это:

Тогда ты в первом процессе сможешь приостанавливать и запускать второй.

Как сделать 2 процесса и какие команды использовать для приостановки и запуска? Мне не надо расписывать, дайте хотя бы наводку, про что мне читать.

Дворянинов Алексей, CodeInside, Пенза — КАК ПЕРЕСТАТЬ ЗАНИМАТЬСЯ ЕРУНДОЙ И ВЫУЧИТЬ JAVA

Пользователь
Регистрация: 15.12.2010
Сообщений: 78
ну, хм

ну процессы вы полюбому будете походить. вопрос только в том как они у вас будут называтся, потому что единого перевода англ. слова thread пока нету. ну если совсем кратко о процессах то это такой класс который расширяет класс Thread и имеет в себе метод run() в котором происходит все самое интересное. например:

Читайте также:
С какого слова начинается тело программы т е набор команд которые выполняются при запуске программы

package tests2; //небольшой пример процесса //это процесс который один раз запускает сам себя public class ThreadExample extends Thread < //главный метод, везде есть public static void main(String[] args)< new ThreadExample().start(); // тут старт() — метод который запускает процесс //new ThreadExample().start(); //если это строку раскомментировать то будет два процесса одновременно выполняся >public void run()< String[] s = new String[]; for (int i=0; i catch(Exception ignored)<> > System.out.println(«и все»); > >
в любом учебнике по яве есть эта тема

Источник: www.programmersforum.ru

Как остановить поток?

На данный момент в Java принят уведомительный порядок остановки потока (хотя JDK 1.0 и имеет несколько управляющих выполнением потока методов, например stop() , suspend() и resume() — в следующих версиях JDK все они были помечены как deprecated из-за потенциальных угроз взаимной блокировки).

Для корректной остановки потока можно использовать метод класса Thread — interrupt() . Этот метод выставляет некоторый внутренний флаг-статус прерывания. В дальнейшем состояние этого флага можно проверить с помощью метода isInterrupted() или Thread.interrupted() (для текущего потока). Метод interrupt() также способен вывести поток из состояния ожидания или спячки. Т.е. если у потока были вызваны методы sleep() или wait() – текущее состояние прервется и будет выброшено исключение InterruptedException . Флаг в этом случае не выставляется.

Схема действия при этом получается следующей:

  • Реализовать поток.
  • В потоке периодически проводить проверку статуса прерывания через вызов isInterrupted() .
  • Если состояние флага изменилось или было выброшено исключение во время ожидания/спячки, следовательно поток пытаются остановить извне.
  • Принять решение – продолжить работу (если по каким-то причинам остановиться невозможно) или освободить заблокированные потоком ресурсы и закончить выполнение.

Возможная проблема, которая присутствует в этом подходе – блокировки на потоковом вводе-выводе. Если поток заблокирован на чтении данных — вызов interrupt() из этого состояния его не выведет. Решения тут различаются в зависимости от типа источника данных. Если чтение идет из файла – долговременная блокировка крайне маловероятна и тогда можно просто дождаться выхода из метода read() . Если же чтение каким-то образом связано с сетью – стоит использовать неблокирующий ввод-вывод из Java NIO.

Читайте также:
Где перечисляются все переменные используемые в программе

Второй вариант реализации метода остановки (а также и приостановки) – сделать собственный аналог interrupt() . Т.е. объявить в классе потока флаги – на остановку и/или приостановку и выставлять их путем вызова заранее определённых методов извне. Методика действия при этом остаётся прежней – проверять установку флагов и принимать решения при их изменении. Недостатки такого подхода. Во-первых, потоки в состоянии ожидания таким способом не «оживить». Во-вторых, выставление флага одним потоком совсем не означает, что второй поток тут же его увидит. Для увеличения производительности виртуальная машина использует кеш данных потока, в результате чего обновление переменной у второго потока может произойти через неопределенный промежуток времени (хотя допустимым решением будет объявить переменную-флаг как volatile ).

Источник: bookflow.ru

Java: Как остановить исполняемый файл jar, который никогда не заканчивается

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

Я не хочу, чтобы убить все процессы java.exe, как я хочу, чтобы другие приложения запускались

user3629658 31 Май 2017 в 17:57

3 ответа

Лучший ответ

Есть три варианта:

  • Начните в командной строке с java -jar [YourJarPath] (Закрыть (Ctr + C) или закрыть командную строку
  • Перезагрузите Windows
  • Завершить его в диспетчере задач (Ctrl + Alt + Del)

В разделе «Подробности»

Затем найдите «javaw.exe». Щелкните правой кнопкой мыши, а затем что-то вроде выключения или выхода из задачи.

Чтобы найти имя фляги, запустите в cmd (командной строке) этот код:

C:Program FilesJava[YOUR JAVA VERSION]binjps.exe

Он вернет что-то вроде этого:

Число перед «именем» — это ваш PID , который также указан в диспетчере задач рядом с javaw.exe

Читайте также:
Решение задач алгебра программа

Developer66 31 Май 2017 в 17:19

JVM запускает новый процесс java.exe каждый раз, когда вы запускаете jar . Очевидно, потому что запуск jar выполняется как java -jar .

Таким образом, найдя точный процесс, который содержит процесс вашего jar, вы можете безопасно убивать, не беспокоясь об остальных java-приложениях.

Andremoniy 31 Май 2017 в 15:00

Перечислите все работающие банки вместе с их PID. Тогда вы можете просто убить этот процесс (с помощью kill $PID )

Источник: question-it.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru