我正在尝试使用命名管道在 Windows 上使用 v01ver 描述的方法在 Windows 上提供 C# 应用程序和 Java 应用程序之间的通信:How to open a Windows named pipe from Java?
我在 Java 端遇到了一个问题,因为我有一个读取器线程一直在等待管道上的输入,当我尝试从我的主线程写入管道时,它会永远卡住。
final RandomAccessFile pipe;
try {
pipe = new RandomAccessFile("\\\\.\\pipe\\mypipe", "rw");
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
return;
}
Thread readerThread = new Thread(new Runnable() {
@Override
public void run() {
String line = null;
try {
while (null != (line = pipe.readLine())) {
System.out.println(line);
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
});
readerThread.start();
try { Thread.sleep(500); } catch (InterruptedException e) {}
try {
System.out.println("Writing a message...");
pipe.write("Hello there.\n".getBytes());
System.out.println("Finished.");
}
catch (IOException ex) {
ex.printStackTrace();
}
输出是:
Writing a message...然后它永远等待。
如何在另一个线程中等待输入时写入命名管道?
最佳答案
这是管道的预期行为。它应该挂起,直到其他进程连接到管道并读取它。
关于java - Java 中命名管道的并发读/写(在 Windows 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974989/