线程//在ActionListener中

时间:2014-03-14 12:07:57

标签: java multithreading actionlistener

我有一个ActionListener,我想要同时(因此它需要在ActionListener中)以在//.

中运行一个线程

我的例子:我点击Connect按钮,它会通过端口com发送一条消息然后在发送之后我想用read_port_com函数启动我的线程,它将通过我的设备答案。

这是我的代码:

            JB_Connect.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0) { 
                    System.out.println("Choix Port Com =>" + ChoixPortCom);
                    if (ChoixPortCom == null) {
                        JOptionPane.showMessageDialog(null, "Choose Port COM");
                    }
                    else {
                        CommPortIdentifier portId = null;
                        try {

                            //******************************************************
                            //*************** Initialisation du Port ***************
                            //******************************************************

                            portId = CommPortIdentifier.getPortIdentifier(ChoixPortCom);
                            SerialPort serialPort = (SerialPort) portId.open("Main Frame", 5000);
                            System.out.println("serialPort ouvert");
                            outputStream = serialPort.getOutputStream();

                            serialPort.setRTS(false);
                            serialPort.setInputBufferSize(8192);
                            serialPort.setOutputBufferSize(8192);

                            //******************************************************
                            //************** Port Paramètre ************************
                            //******************************************************

                            serialPort.setSerialPortParams(115400, SerialPort.DATABITS_8,
                                    SerialPort.STOPBITS_1,
                                    SerialPort.PARITY_NONE);
                            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_XONXOFF_IN |     
                                    SerialPort.FLOWCONTROL_XONXOFF_OUT);

                            //******************************************************
                            //******************** Send ****************************
                            //******************************************************

                            System.out.println("j'envoie => 123");
                            outputStream.write("123".getBytes());
                            System.out.println("Envoie du msg -> ok");

                            //******************************************************
                            //******************** Read ****************************
                            //******************************************************



                            //******************************************************
                            //***************** Fermeture **************************
                            //******************************************************

                            outputStream.close();
                            outputStream = null;
                            serialPort.close();
                            System.out.println("Fermeture du PORT_COM -> OK");

                            //******************************************************

                            JB_Connect.setVisible(false);
                            JL_Connect.setVisible(true);

                        } catch (IOException e) {
                            System.out.println("IOException -> Problème");
                            e.printStackTrace();
                        } catch (UnsupportedCommOperationException e) {
                            System.out.println("UnsupportedCommOperationException -> Problème");
                            e.printStackTrace();
                        } catch (NoSuchPortException e) {
                            System.out.println("NoSuchPortException -> Problème");
                            e.printStackTrace();
                        } catch (PortInUseException e) {
                            System.out.println("PortInUseException -> Problème");
                            e.printStackTrace();
                        }
                    }
                }      
            }); 

线程需要来到我放READ的地方,所以我尝试但没有工作:

我想调用setSerialListener()

private void readSerial() {
    try {
        int availableBytes = inputStream.available();
        if (availableBytes > 0) {
            // Read the serial port
            inputStream.read(readBuffer, 0, availableBytes);

            // Print it out
            System.out.println(
                    new String(readBuffer, 0, availableBytes));
        }
    } catch (IOException e) {
    }
}
private class ReadThread implements Runnable {
    public void run() {
        while(true) {
            readSerial();
        }
    }
}

public void setSerialListener() {
    new Thread(new ReadThread()).start();
}

这段代码取自官方的例子,但我不知道如何使用它。

编辑:

我的解决方案可能不是最好的,但它对我有用:p

                            boolean ok = false;

                            while(ok == false) {
                            try {
                                System.out.println("je suis dans le try ");
                                int availableBytes = inputStream.available();
                                if (availableBytes > 0) {
                                    // Read the serial port
                                    inputStream.read(readBuffer, 0, availableBytes);                                        
                                    // Print it out
                                    System.out.println("J'ai lu : ");
                                    System.out.println(
                                    new String(readBuffer, 0, availableBytes));
                                    Reponse = new String(readBuffer, "UTF-8");          // bytes -> String
                                    ok = true;
                                }
                            } catch (IOException e) {
                            }
                            }

0 个答案:

没有答案