java控制檯下實現enter鍵中斷的方法

java控制檯下實現enter鍵中斷的方法

最近編譯原理實驗課,老師佈置了郵箱的正則表達式的作業,還要求我們使用網頁爬蟲去爬取郵箱。爬蟲涉及聯網操作,非常耗時間,因此最好提供一個終止命令。
1、最容易想到的就是implements KeyListener 接口,然後實現KeyPressed等接口,如下:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Scanner;

public class TestEnter implements KeyListener{
      private int flag = 1;
      public void doThings(){
            System.out.print("開始blabla::");
            for(int i = 0;flag==1;i++){
                  //一直做某事,直到enter中斷它
                  System.out.println("正在blabla,press Enter to terminate!");
            }
      }
      public static void main(String argv[]){
            TestEnter testEnter = new TestEnter();
            testEnter.doThings();
      }
      @Override
      public void keyPressed(KeyEvent e) {
            // TODO Auto-generated method stub
            flag = 0;
      }
      @Override
      public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub
            flag = 0;
      }
      @Override
      public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub
            flag = 0;
      }
}

然而,運行之後卻沒有任何反應,首先習慣性地在keyPressed、keyReleased、keyTyped中加入debug信息:但是還是沒有反應。
果斷google之,原來才知道,只有在GUI的程序中才能實現鍵盤的中斷事件。。。。。(看import包:java.awt.event.KeyListener;)


2、換一個思路,使用單獨的線程來監聽控制檯的輸入信息,若有enter鍵,則中斷:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Scanner;




public class TestEnter{
      private int flag = 1;
      public void startListen(){
            //使用另外一個單獨的線程“監聽”控制檯
            Thread thread = new Thread(new Runnable(){
                  @Override
                  public void run() {
                              // TODO Auto-generated method stub
                              //wait for input
                              Scanner scanner = new Scanner(System.in);
                              scanner.nextLine();//使用nextine可以讀入回車,達到終止的效果
                              flag = 0;//終止
                        }
                  });
            thread.start();
      }
      public void doThings(){
            System.out.print("開始blabla::");
            this.startListen();//開始“監聽”
            for(int i = 0;flag==1;i++){
                  //一直做某事,直到enter中斷它
                  System.out.println("正在blabla,press Enter to terminate!");
            }
      }
      public static void main(String argv[]){
            TestEnter testEnter = new TestEnter();
            testEnter.doThings();
      }
}

毋庸置疑,這個很好的實現了所需功能,但是要求doThings()中不能有控制檯的輸入。
發佈了43 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章