Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用actionListener()退出InputStream.read()_Java_Loops_While Loop_Inputstream_Actionlistener - Fatal编程技术网

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

Java 使用actionListener()退出InputStream.read(),java,loops,while-loop,inputstream,actionlistener,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 available

我有一个这样的循环:

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) {
    }
JB_MeasurMode.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0) {
                    sortie = true;
                }      
            });
}

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

我有一个JButton动作监听器,声明如下:

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) {
    }
JB_MeasurMode.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0) {
                    sortie = true;
                }      
            });
所以我要做的是,它进入“测量模式”,这意味着程序保持对com端口的读取模式。为了退出这个“测量模式”,我添加了一个jbutton,它应该改变while条件以退出它。 但我的问题是,当我进入while循环时,我所有的按钮都被“冻结”,我不能点击

当我执行“InputStream.Read”时,它是否会阻止所有其他事件?

使用“while”循环所做的操作称为轮询

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

1-Thread.currentThread().sleep(毫秒)-循环结束时


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

谢谢,我不知道你在说什么,但我要检查这个.Ps。不要使用空的catch块,至少通过记录错误-system.err或log4j(如果使用)来修复此问题:)输入流是什么?套接字?没有套接字,它是InputStream类型,只是字节的输入流。我需要使用此函数,因为我正在从端口COM读取数据。