使用actionListener()退出InputStream.read()

时间:2014-04-02 08:18:03

标签: java loops while-loop inputstream actionlistener

我有一个这样的循环:

while(sortie == false) {
     int availableBytes = 0;
     try {
            read = 0;
            availableBytes = inputStream.available();
            if (availableBytes > 0) {
            System.out.println("je suis dans le availableBytes > 0 du while -- read = "+read);                                          read = read + availableBytes;

            int raw = inputStream.read(readBuffer, read-availableBytes, availableBytes);
            traduction = new String(readBuffer, read-availableBytes, raw);
            System.out.println("2=>" + traduction);
            tradV2 = tradV2 + traduction;    // bytes -> String
        }
    if (read == 19){
            System.out.println("une donnee de 19 char lue -- read = "+read);
        }
    } catch (IOException e) {
    }

}

在调用之前,我会进行初始化并设置端口参数。

我有一个像这样声明的JButton动作监听器:

JB_MeasurMode.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0) {
                    sortie = true;
                }      
            });

所以我正在尝试做它,它进入“测量模式”,这意味着程序保持读取模式到端口com。为了退出这个“测量模式”,我添加了一个jbutton,它应该改变while条件以退出它。 但是我的问题是,当我进入while循环时,我的所有按钮都被“冻结”,我无法点击。

当我这样做时,“InputStream.Read”会阻止所有其他事件吗?

1 个答案:

答案 0 :(得分:0)

你正在做什么"而" -loop被称为POLLING。

  

http://en.wikipedia.org/wiki/Polling_%28computer_science%29

我建议你实施应该同时实施的解决方案。

1 - Thread.currentThread()。sleep(millis) - 在循环结束时

2 - 在单独的线程中启动循环,记住安全线程布尔变量,如 java.util.concurrent.atomic.AtomicBoolean