Нажмите чтобы продолжить java

Java — ожидание нажатия какой-либо клавиши для продолжения

Как лучше всего реализовать в Java команду типа «нажмите x, чтобы продолжить»?

В частности, у меня есть собственный класс, расширяющий JFrame, и собственный класс, расширяющий JPanel. У меня есть Main.java (в котором есть экземпляр моего класса JFrame), и есть точка, в которой я не хочу продолжать, пока пользователь не нажмет пробел:

. code. frame.waitForSpace(); . more code which gets executed only after space is pressed. 

Итак, в моем классе фреймов, как мне это реализовать:

/* This method only finishes when the space bar is pressed */ public void waitForSpace()

Кстати, у меня есть KeyListener на моем JFrame, который работает при нажатии кнопки пробела. Но я не совсем уверен, как включить это в то, что я пытаюсь сделать.

Пример кода был бы потрясающим!

4 ответы

Поместите все, что вы хотите сделать, когда пользователь нажимает пробел в этот обработчик. Скорее всего, вы не хотите делать (что угодно) каждый раз, когда нажимается пробел, а только иногда; поэтому обработчик событий должен зависеть от значения некоторой переменной и кода, который запускается до вы хотите, чтобы пользователь нажимал пробел, следует установить для этой переменной значение, означающее «сделай это». После запуска обработчик должен вернуть переменной значение по умолчанию.

Читайте также:  Auto Post Blogger With PHP Script - Pakainfo.com

Помните, что графический интерфейс Swing управляется событиями. Так что не ждите ничего. Вместо этого дайте вашему классу какое-то поле состояния, возможно, логическое, измените переменную состояния при нажатии клавиши, возможно, используя привязки клавиш, а затем не разрешайте определенное поведение, если состояние не было изменено (с помощью операторов if).

Не используйте KeyLIstener.

Используйте привязки клавиш. Вам уже была предоставлена ​​ссылка на руководство по привязке клавиш.

Использование Защелка когда вызывается await (), текущий поток main () будет ждать, пока метод countDown () не будет вызван из другого потока.

Наблюдения и советы этой статьи мы подготовили на основании опыта команды KeyEventDispatcher позволяет добавить прослушиватель нажатия клавиш глобально. Таким образом, всякий раз, когда нажимается клавиша, dispatchKeyEvent () вызывается из EDT (потока диспетчеризации событий), и там вы можете проверить нажатие «пробела» и отпустить защелку обратного отсчета, которую ожидает main ().

Однако, если поток, вызывающий waitForSpace (), является EDT, вы заставляете EDT ждать самого себя, вызывая тупик. Насколько мне известно, невозможно дождаться EDT и все еще получать ключевые события.

Это будет работать, пока JFrame имеет фокус:

public void waitForSpace() < final CountDownLatch latch = new CountDownLatch(1); KeyEventDispatcher dispatcher = new KeyEventDispatcher() < // Anonymous class invoked from EDT public boolean dispatchKeyEvent(KeyEvent e) < if (e.getKeyCode() == KeyEvent.VK_SPACE) latch.countDown(); return false; >>; KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(dispatcher); latch.await(); // current thread waits here until countDown() is called KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(dispatcher); > 

Источник

Нажмите Enter, чтобы продолжить в Java

Нажмите Enter, чтобы продолжить в Java

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

Использование дополнительной nextLine() для ожидания клавиши ввода в Java

В примере мы создаем объект класса Scanner , sc . Scanner сканирует текст и разбирает примитивные типы типа int и String . Этот класс имеет множество методов, которые используются в операциях ввода. Чаще всего используются методы nextInt() , nextLine , nextDouble и т. Д.

В приведенном ниже примере мы увидим, в чем проблема, и воспользуемся методом для ее решения в следующем.

Здесь мы берем три входа: тип int , а следующие два — типа String . Мы используем класс Scanner , чтобы сначала вызвать метод nextInt() , чтобы получить ввод для возраста в переменную типа int ; затем, чтобы ввести имя и фамилию, мы используем два метода sc.nextLine() и две переменные для их хранения. Наконец, мы показываем все значения переменных на выходе.

Проблема заключается в том, что пользователь вводит значение age и нажимает Enter. Консоль должна получать ввод для firstName , но она пропускает его и сразу переходит к lastName . Приведенный ниже вывод ясно показывает проблему.

import java.util.Scanner;  public class EnterContinue   public static void main(String[] args)   Scanner sc = new Scanner(System.in);  System.out.print("Enter your age: ");  int age = sc.nextInt();   System.out.print("Enter your First Name: ");  String firstName = sc.nextLine();   System.out.print("Enter your last Name: ");  String lastName = sc.nextLine();   System.out.println("Your Info:\nAge: " + age + "\nFull Name: " + firstName + " " + lastName);  >  > 
Enter your age: 23 Enter your First Name: Enter your last Name: John Your Info: Age: 23 Full Name: John  Process finished with exit code 0 

Теперь, когда мы знаем проблему, мы можем обсудить решение и причину возникновения проблемы. Когда мы берем на вход значение int , метод nextInt() считывает значение int и не может прочитать новую строку. Вот почему, когда мы нажимаем Enter после чтения int , консоль воспринимает это как новую строку и пропускает его к следующему оператору.

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

import java.util.Scanner;  public class EnterContinue   public static void main(String[] args)   Scanner sc = new Scanner(System.in);  System.out.print("Enter your age: ");  int age = sc.nextInt();   System.out.print("Enter your First Name: ");  String firstName = sc.nextLine();  sc.nextLine();   System.out.print("Enter your last Name: ");  String lastName = sc.nextLine();   System.out.println("Your Info:\nAge: " + age + "\nFull Name: " + firstName + " " + lastName);  >  > 
Enter your age: 5 Enter your First Name: gfd Enter your last Name: gfgf Your Info: Age: 5 Full Name: gfgf 

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

Сопутствующая статья — Java Scanner

Источник

Русские Блоги

Как реализовать «Pless нажимает любую клавишу, чтобы продолжить.» В Java

import java.util.*; class Continue public static void main(String[] args)< Scanner scanner=new Scanner(System.in); System.out.println("Pless presss any key to continue."); String key=scanner.next(); > >

Но вы должны нажать Enter, чтобы написать таким образом, и вы не можете продолжить, когда вы вводите первый символ
Я не могу придумать лучшего способа

Интеллектуальная рекомендация

Groovy Integer тип

Сначала смотрите документацию: Это так же, как Java. Джава Например, определить некоторые целочисленные переменные Есть двоичный восьмеричный 16 в Java, то есть также Groovy. Двоичный литеративный дво.

HDU6390 (линейная заглушка Euler+обратные yuan watch)

Ссылка на заголовок:http://acm.hdu.edu.cn/showproblem.php?pid=6390 Идея: если n-это k времени качества p (то есть n = p^k), φ (n) = p^k-p^(k-1) = (p-1) p^(k-1) Полем Если m, n взаимодействие, &phi.

Сортировка алгоритма

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

Контраст между добавлением, удалением, удалением, удалением, удалением, удалением и изменением двухэтажного списка цикла и последовательного списка и связанного списка

Название каталога Возьмите лидерство в дополнение к удалению, удалению, расследованию и изменению двухэтажного цикла списка Сравнение последовательных таблиц и связанных списков Возьмите лидерство в д.

Источник

Как мне получить «Нажмите любую клавишу, чтобы продолжить», чтобы работать в моем Java-коде?

Я хочу, чтобы пользователь снова вводил информацию в первый цикл while после нажатия любой клавиши на клавиатуре. Как мне это достичь? Я делаю что-то неправильно с циклами while. Должен ли я просто иметь один цикл?

 import java.util.Scanner; public class TestMagicSquare < public static void main(String[] args) < boolean run1 = true; boolean run2 = true; Square magic = new Square(); Scanner in = new Scanner(System.in); while(run1 = true) < System.out.print("Enter an integer(x to exit): "); if(!in.hasNextInt()) < if(in.next().equals("x")) < break; >else < System.out.println("*** Invalid data entry ***"); >> else < magic.add(in.nextInt()); >> while(run2 = true) < System.out.println(); if(!magic.isSquare()) < System.out.println("Step 1. Numbers do not make a square"); break; >else < System.out.println("Step 1. Numbers make a square"); >System.out.println(); if(!magic.isUnique()) < System.out.println("Step 2. Numbers are not unique"); break; >else < System.out.println("Step 2. Numbers are unique"); >System.out.println(); magic.create2DArray(); if(!magic.isMagic()) < System.out.println("Step 3. But it is NOT a magic square!"); break; >else < System.out.println("Step 3. Yes, it is a MAGIC SQUARE!"); >System.out.println(); System.out.print("Press any key to continue. ");// Here I want the simulation in.next(); if(in.next().equals("x")) < break; >else < run1 = true; >> > > 

ОТВЕТЫ

Ответ 1

Вы можете создать эту функцию (полезно только для ввода ключа) и использовать ее там, где вы хотите в своем коде:

 private void pressAnyKeyToContinue() < System.out.println("Press Enter key to continue. "); try < System.in.read(); >catch(Exception e) <> > 

Ответ 2

1) См. while(run1 = true) и while(run2 = true)

= — оператор присваивания в java. use == для сравнения примитивов

2) Вы можете сделать это следующим образом:

Ответ 3

Прежде чем вдаваться в подробности реализации, я думаю, вам нужно немного отступить и пересмотреть свой алгоритм. Из того, что я собираю, вы хотите получить список целых чисел от пользователя и определить, образуют ли они магический квадрат. Вы можете сделать первый шаг в одном цикле while. Что-то вроде этого псевдокода:

while (true) print "Enter an integer (x to stop): " input = text from stdin if input is 'x' break else if input is not an integer print "non integer value entered, aborting. " return else add input to magic object 

После этого вы можете вывести информацию о номерах:

if magic is a magic square print "this is a magic square" else print "this is not a magic square" // etc, etc. 

Источник

Оцените статью