2017-07-17 53 views
0

我正在研究一個連接到我的Arduino Uno的簡單指紋掃描器。我已經通過USB將我的電路連接到了我的電腦,這樣我就可以連續讀取Arduino正在爲指紋掃描器處理的數據。我正在爲使用JavaFX的項目製作一個簡單的UI。到目前爲止,我已經做了幾個階段。JavaFX Arduino通信(JSSC) - 首先展示舞臺,然後閱讀Arduino

首先是家庭舞臺上有一個按鈕。基本上,單擊此按鈕將打開串口,並偵聽2個事件中的1個,即註冊/驗證模式(電路上的物理按鈕,在將串行「註冊」或「驗證」字符串發送到串行之後)。在註冊後,一個新的階段打開了,由於Arduino已經準備好登記印刷品,所以我不必再次閱讀該系列。掃描完打印後,我填寫一張表格,然後點擊一個提交按鈕,該按鈕將指紋識別器創建的指紋ID與表格中的一個字段(幕後)鏈接起來。然後舞臺關閉,我開始重新閱讀這個序列。

這是問題開始的地方。

我找哪個窗口打開,但我怎麼能打開的窗口(取決於其壓在電路物理按鈕)第一,然後重新讀取串口用戶是否被驗證,然後改變窗戶上的東西?

它似乎很複雜,我知道,這就是爲什麼一些代碼在下面。

submitForm.setOnAction(new EventHandler<ActionEvent>() 
    { 
     @Override 
     public void handle(ActionEvent e) 
     { 
      if(firstNameTextField.getText().length()>0 && 
       lastNameTextField.getText().length()>0 && 
       gpnTextField.getText().length() == 8) 
      { 
       enrollStage.hide(); 
       try { 
        //System.out.println("winfwnif "); 
        if(readEnroll(sp)==true) 
        { 
         id++; 
        } 
        Employee employee = new Employee(Long.parseLong(gpnTextField.getText()), id); 
        pw = new PrintWriter(file); 
        pw.println(employee.getFP() + "," + employee.getGPN()); 
        pw.close(); 
       } catch (FileNotFoundException | SerialPortException | InterruptedException e2) { 

        e2.printStackTrace(); 
       } 
       firstNameTextField.setText(""); 
       lastNameTextField.setText(""); 
       gpnTextField.setText(""); 
       enrollStage.hide(); 
       home.show(); 
       try 
       { 
        home.close(); 
        int mod = checkMode(sp); 
        if(mod == 1) 
        { 
         enrollStage.show(); 
        } 
        else if(mod == 2) 
        { 

         boolean f = false; 
         //Thread.sleep(2000); 
         synchronized(verificationStage) 
         { 
          verificationStage.show(); 
          Thread.sleep(2000); 
          f = readVerify(sp); 

         } 
         if(f) 
         { 
          userImageIV.setImage(new Image("/images/temp.png", 250, 400, true, false)); 
          thumbIV.setImage(new Image("/images/greenThumb.png", 150, 300, true, false)); 
         } 

        } 
       } 
       catch(SerialPortException | InterruptedException err) 
       { 

       } 
      } 
     } 
    }); 

這是我用來從Arduino讀取驗證輸出的函數。

public boolean readVerify(SerialPort s) throws SerialPortException, InterruptedException 
{ 
    while (true) 
    { 
     if (sp.getInputBufferBytesCount() > 0) 
     { //check size of buffer 
      String x = s.readString(); 
      System.out.println(x); 
      if(x.contains("Verified")) 
      { 
       return true; 
      } 
     } 
     Thread.sleep(100); 
    } 

} 

我試圖打開窗戶,然後調用readVerify(的SerialPort S)後等待2秒,但由於某些原因,它讀取打印,驗證,然後打開的窗口。我一直在嘗試相反的方法 - 打開窗戶,驗證,然後在窗口上更改一些圖像(如果驗證)。我如何去做這件事?

最後一件事,

checkMode(SerialPort s) 

是相當多的被用於在電路讀取按鈕輸入。根據按下的按鈕,checkMode(SerialPort s)返回1(登記模式)或2(驗證模式)。

回答

0

我發現這個問題,有人問here如何在窗口加載後運行代碼。使用WindowEvent可能是解決代碼分解問題的原因,因此readVerify()在WindowEvent偵聽器方法中。