JavaFX Arduino通信(JSSC)-首先显示阶段,然后读取Arduino

JavaFX Arduino通信(JSSC)-首先显示阶段,然后读取Arduino,java,multithreading,javafx,arduino,jssc,Java,Multithreading,Javafx,Arduino,Jssc,我正在做一个简单的指纹扫描仪,它连接到我的Arduino Uno。我已经通过usb将我的电路连接到我的电脑,这样我就可以连续读取Arduino正在为指纹扫描仪处理的数据。我正在使用JavaFX为项目制作一个简单的UI。到目前为止,我已经完成了几个阶段 第一个是主舞台,上面有一个按钮。基本上,单击此按钮打开串行端口并侦听两种方式中的一种,即注册/验证模式(电路上的物理按钮,按下后将字符串“注册”或“验证”发送到串行端口)。按下注册按钮后,一个新的阶段打开,因为Arduino已经准备好注册打印,我不

我正在做一个简单的指纹扫描仪,它连接到我的Arduino Uno。我已经通过usb将我的电路连接到我的电脑,这样我就可以连续读取Arduino正在为指纹扫描仪处理的数据。我正在使用JavaFX为项目制作一个简单的UI。到目前为止,我已经完成了几个阶段

第一个是主舞台,上面有一个按钮。基本上,单击此按钮打开串行端口并侦听两种方式中的一种,即注册/验证模式(电路上的物理按钮,按下后将字符串“注册”或“验证”发送到串行端口)。按下注册按钮后,一个新的阶段打开,因为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)
                {

                }
            }
        }
    });
我尝试在打开窗口后等待2秒钟,然后调用readVerify(SerialPort s),但由于某些原因,它读取打印,验证,然后打开窗口。我一直在尝试相反的方法-打开窗口,验证,然后在窗口上更改几个图像(如果验证)。我该怎么做呢

最后一件事

checkMode(SerialPort s) 

基本上是用来读取电路上的按钮输入的。根据按下的按钮,checkMode(SerialPort s)返回1(注册模式)或2(验证模式)。

我在有人问如何在加载窗口后运行代码时发现了这个问题。使用WindowEvent可能是一种解决方案,您可以分解代码,使readVerify()位于WindowEvent侦听器方法中

checkMode(SerialPort s)