当前位置: 首页 > 知识库问答 >
问题:

如何使用BufferedReader(Java)中断读操作?

谭新知
2023-03-14

你好,虽然我读了很多其他答案,但我不明白如何关闭BufferedReader而不发送输入。这是我程序的阻塞部分:

public class AuctionClientUserListener extends Thread {

    private PrintWriter out;
    private BufferedReader stdIn;
    private int udpPort;
    private boolean running = true;
    private boolean listening = true;

    // needs server connection out
    public AuctionClientUserListener(BufferedReader stdIn,PrintWriter out,int udpPort) {
        this.stdIn = stdIn;
        this.out = out;
    }

    public void run() {
        String fromUser;

        while(true) {
            if(!listening) {
                break;
            }
            try {

                fromUser = stdIn.readLine(); // BLOCKS

                if (fromUser != null) {
                        System.out.println("Me: " + fromUser);

                        // check if to send udp port
                        String[] spinput = fromUser.split(" ");
                        if(spinput[0].equals("!login")) {
                            fromUser+=" "+udpPort;
                        }

                        out.println(fromUser);

                        if(fromUser.equals("!end")) {
                            listening = false;
                        }
                }
            } catch(Exception e) {
                listening = false;
            }
        }
        running = false;
    }

    public boolean running() {
        return running;
    }

    public void endListening() {

        this.listening =  false;
    }
}

当我从主线程调用“endListing()”时,程序终止--但不会在用户输入任何内容之前终止。我想让程序立即终止--如何启动这个BufferdReader(像BufferedReader一样创建(新的InputStreamReader(System.in))?

我试图在主线程中的这个线程上调用stdin.close()和Thread.interrupt(),但它不起作用。我还尝试关闭主线程中的InputStreamReader。

共有1个答案

弓嘉纳
2023-03-14

您可以在调用bufferedreader.readline()之前检查是否有可用的数据,即。

while(true) {
    if (!listening) break;
    if (System.in.available() > 0) {
        try {
            fromUser = stdIn.readLine();
            // etc.
 类似资料:
  • 问题内容: 可以说我有一个文本文件:data.txt(包含2000行) 如何从500-1500,然后从1500-2000读取给定的特定行,并显示特定行的输出? 此代码将读取整个文件(2000行) 如何修改上述代码以读取特定行? 问题答案: 我建议使用java.io.LineNumberReader。它扩展了BufferedReader,您可以使用它来获取当前行号 您还可以使用Java 7 ,如果适

  • 问题内容: 我试图在多个线程中逐行读取套接字的输入。如何中断,以便可以正常停止正在阻塞的线程? 编辑(赏金) :可以在不关闭套接字的情况下完成此操作吗? 问题答案: 关闭中断线程上的套接字。这将导致在中断的线程上引发异常。 有关此和其他并发问题的更多信息,我强烈推荐Brian Goetz的书“ Java并发实践”。

  • 我写了一个简单的关于在客户端和服务器之间发送/接收消息的套接字教程。我使用DataOutputStream在流中写入字符串,但是如果我使用BufferedReader,服务器无法读取它 如果我使用PrintWriter来写(客户端),它可以工作。 这里怎么了?非常感谢。 1.客户: 2.服务器:

  • 我试图创建一个简单的java服务器应用程序,但我很难用BufferedReader正确读取用户的输入。问题是行delimeter仅为CR LF(“\r\n”),因此我不能使用readLine()标准方法。因此,我尝试实现我自己的方法: 现在,当我尝试获取并打印结果时: ...它只将字符序列打印到第一个换行符(“\r”或“\n”),其余输入由第二次调用readCRLFLine(inputStream

  • 问题内容: 我正在阅读文件,但我不知道如何阅读口音和特殊字符,这是我阅读的代码,我必须添加其他编纂,但我不知道该怎么做 谢谢 问题答案: 请尝试以下操作:

  • 问题内容: 此代码有什么问题。BufferedReader和Writer类可以实现吗?我知道如何使用InputStream和OutputStream制作图像的副本,所以不要粘贴使用它的解决方案! 问题答案: 此代码有什么问题。 您正在使用基于文本的类来存储二进制数据。 BufferedReader和Writer类可以吗? 不,当您处理二进制数据时,不会。 我知道如何使用InputStream和Ou