Java 扫描仪输入出现问题

Java 扫描仪输入出现问题,java,java.util.scanner,Java,Java.util.scanner,我正在编写一个代码,从连接到计算机的一个“COMs”的辐射计传感器获取数据,为了获得测量值,我必须与该传感器进行通信,抛出“COM7”,并编写命令“gi”,以从命令用户界面获取类似“9.919e-08”的值 现在我对代码有一个问题,它给了我一个错误“找不到行” 这是代码 package reading_data; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import

我正在编写一个代码,从连接到计算机的一个“COMs”的辐射计传感器获取数据,为了获得测量值,我必须与该传感器进行通信,抛出“COM7”,并编写命令“gi”,以从命令用户界面获取类似“9.919e-08”的值

现在我对代码有一个问题,它给了我一个错误“找不到行”

这是代码

package reading_data;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;

import com.fazecast.jSerialComm.SerialPort;

public class main {

public static void main(String[] args) throws IOException, InterruptedException {
        
    SerialPort sp= SerialPort.getCommPort("COM7");
    sp.setComPortParameters(115200, 8, 1, 0);
    sp.setComPortTimeouts(SerialPort.TIMEOUT_WRITE_BLOCKING, 0, 0);

    sp.openPort();
    
    if(sp.isOpen()) {
    System.out.println("Port is open");
        
    PrintWriter output=new PrintWriter(sp.getOutputStream());
    Scanner data=new Scanner(sp.getInputStream());
    output.println("gi");
    String ssss=data.nextLine();
    System.out.println("--++++---->"+ssss);
    
    }else {
        System.out.println("Port is not open");
    }   
    
    sp.closePort();

}
}
这是我得到的错误

Port is open
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at reading_data.main.main(main.java:26)
你能告诉我我的错在哪里吗

提前感谢

试试这样:

output.flush();    
if(data.hasNextLine()) {
  String ssss=data.nextLine();
}
如果没有下一行,就不要打下一行。 编辑:需要进行刷新。

尝试如下操作:

output.flush();    
if(data.hasNextLine()) {
  String ssss=data.nextLine();
}
如果没有下一行,就不要打下一行。
编辑:需要进行刷新。

我个人会在输出后调用output.flush()。println(…),如果我想确保数据已发送。通常关闭()应该足够了,但如果您需要数据,请在需要时尝试刷新。已回答here@sigur您好,先生,我添加了这一行,但仍然有一个问题,您确定“COMX”“你写了什么?也许你正试图在COM发布响应之前获得响应。有不同的方法,最简单的应该是:你在一段时间内设置一个等待条件!data.hasNextLine并睡眠数毫秒。然后,当data.hasNextLine为true时,您将执行nextLine.personal,我会在output.println(…)之后调用output.flush()。通常close()应该足够了,但如果您需要数据,请在需要时尝试刷新它们。已经回答了here@sigur您好,先生,我添加了这一行,但仍然有一个问题您确定“COMX”写了什么吗?也许你正试图在COM发布响应之前获得响应。有不同的方法,最简单的应该是:你在一段时间内设置一个等待条件!data.hasNextLine并睡眠数毫秒。然后,当data.hasNextLine为true时,您将执行nextLine.hello sir,我这样做了,但程序没有进入if条件,我也尝试了tp打印“data”,控制台中的输出如下“java.util.Scanner[delimiters=\p{javaWhitespace}+][position 0][match valid=false][need input=false][source closed=true][skipped=false][group separator=\x”{2c}][decimal separator=\x{2e}][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]”我已经修改了我的注释。正如@sigur在他的注释中所述,您必须刷新。如果没有刷新,data.hasnext将始终为false,因为它没有数据。您好,先生,我这样做了,但程序没有进入if条件,我还尝试了tp print“data”,控制台中的输出类似于“java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=true][skipped=false][group separator=\x{2c}][decimal separator=\x{2e}][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix suffix=][NaN NaN string=\Q?\E][infinity string=\Q?\E]”我已经修改了我的评论。正如@sigur在他的评论中所说的,您必须刷新。如果没有刷新,data.hasnext将始终为false,因为它没有数据。