2014-01-24 4 views
1

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

public void menu() 
{ 
    boolean exit = false; 

    System.out.println("-- Command interpreter --"); 
    System.out.println("[1] Write results to console"); 
    System.out.println("[2] Write results to text file"); 
    System.out.println("[3] exit"); 
    System.out.println("-------------------------"); 
    System.out.print("Input Value: "); 

    String s = scaner.nextLine(); 

    int i = Integer.parseInt(s); 

    switch (i) 
    { 
     case 1: 
     { 
      writeToScr(listPopulation); 
      System.out.println("\n\nPress any key to continue.."); 
      scaner.next(); 
      break; 
     } 
     case 2: 
     { 
      writeToFile(listPopulation); 
      System.out.println("\n\nPress any key to continue.."); 
      scaner.next(); 
      break; 
     } 
     case 3: 
     { 
      exit = true; 
      break; 
     } 
     default: 
     { 
      System.out.println("Unknown Entry."); 
      break; 
     } 
    } 

    if (exit) 
    { 
     System.out.println("Exit!"); 
     return; 
    } 
} 

Так что я хочу сделать это, например, в случае 1, когда я получаю результаты, написанные на консоли, я хочу для программы паузу и дайте мне проверить, что у меня есть, пока я не нажать любую клавишу. Мой код работает только для ENTER или любого текста + ENTER. Есть ли способ, которым я мог бы нажимать любую клавишу, не нажимая ENTER после этого, и программа продолжается?

+0

Если у вас есть графический интерфейс, вы можете добавить 'KeyListener' файл' JFrame'. –

+0

Спасибо Josh i добавил KeyListener - реализованный интерфейс. Я предполагаю, что вы думаете о методе keyPressed(). У меня возникли проблемы с его внедрением кода, в первый раз, когда я услышал о KeyListener, можете ли вы помочь мне немного больше? Спасибо – newGuy

ответ

3

Проблема с консолью Java, которая должна работать с каждой операционной системой. Эта консоль не позволяет прослушивать отдельные нажатия клавиш. Для этого вам нужно либо создать графический интерфейс, такой как графический интерфейс Swing, либо использовать альтернативную стороннюю консольную библиотеку, такую ​​как jCurses.

2

Я не думаю, что это возможно через консоль Java. Вам понадобится какой-то API, который может прослушивать события (ключевые штрихи (например, Swing или JNI)).

-1

Как вы хотите дождаться текущего исполнения в корпусе коммутатора, так что ниже приведен небольшой код, который может вам помочь. Он будет ждать, пока пользователь наберет кнопку + Enter.

Код:

import java.lang.Thread; 
import java.util.Scanner; 


public class App{ 

    public void menu() throws InterruptedException 
    { 
    boolean exit = false; 
    Scanner scaner = new Scanner(System.in); 
    System.out.println("-- Command interpreter --"); 
    System.out.println("[1] Write results to console"); 
    System.out.println("[2] Write results to text file"); 
    System.out.println("[3] exit"); 
    System.out.println("-------------------------"); 
    System.out.print("Input Value: "); 

    String s = scaner.nextLine(); 
    int i = Integer.parseInt(s); 

    switch (i) 
    { 
     case 1: 
     { 
      ThreadB b = new ThreadB(); 
     b.start(); 
       synchronized(b) 
       { 
        b.wait(); 
       } 
      System.out.println("\n\nPress any key to continue.."); 
      scaner.next(); 
      break; 
     } 
     default: 
     { 
      System.out.println("Unknown Entry."); 
      break; 
     } 
    } 

    if (exit) 
    { 
     System.out.println("Exit!"); 
     return; 
    } 
} 

    public static void main(String arg[]) 
    { 
     try { 
      new App().menu(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

class ThreadB extends Thread{ 

    Scanner scan = new Scanner(System.in); 

    @Override 
    public void run(){ 

     while(scan.hasNext()) 
     { 
     String abc = scan.next(); 
      if(abc.equalsIgnoreCase("click")) 
      { 
     synchronized(this) 
       { 
        notify(); 
     } 
      } 
     } 
    } 
} 
+0

-1 для не компилируемого кода, который не имеет смысла или работает, даже если он может скомпилировать. –

+0

@HovercraftFullOfEels thnk u. – Kick

+0

Пожалуйста, исправьте свой ответ, чтобы он мог быть протестирован. Сделайте это, и если это сработает, я буду голосовать. Но, пожалуйста, не отправляйте мусорный код. –

Смежные вопросы