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读取数据。