在java中实时将IO Process的值传递给另一个类
Posted
技术标签:
【中文标题】在java中实时将IO Process的值传递给另一个类【英文标题】:passing values of IO Process to another class in real time in java 【发布时间】:2012-02-09 18:29:18 【问题描述】:我有一个基本问题,我需要对其使用进行一些说明。
因此,如果我在 Java 中有一个类说IOReadWrite.java
,我会在其中进行一些 IO 读/写。因此它可能有一个始终连接的循环,例如:
while ((line = stream.readLine()) != null)
//incoming data
现在我有另一个类,称之为FrontEnd.java
,我应该在其中显示来自IOReadWrite.java
类的实时结果。通常发生的情况是,如果我调用 IO 类的方法,除非整个 IO 操作完成并且我必须等待,否则我无法获得结果。
但是,我想要的是能够实时获得这些结果,这样只要输入 Stream 上有内容,我就可以在我的 FrontEnd 类中得到它来做任何我想做的事情。
我想出的一个想法是在 IOReadWrite.java 中使用静态字符串变量并编写一个方法,该方法只返回该变量的值,然后我可以从主类轮询该函数。但我很确定这是一个非常糟糕的方法。
您能否建议实时获取此类信息的正确方法?
【问题讨论】:
IOReadWrite
的操作确实在单独的线程中运行,对吧?如果没有,无论如何你都会阻止。如果是这样,您只需要在线程之间共享(和同步)一些数据结构(甚至只是一个字符串)。
@Viruzzo,谢谢,是的,它在另一个线程中,问题是这是一个通用方法,可以被导入这个库的任何其他类使用,所以在这种情况下,我不能调用外部函数这个类,我只需要为将要使用它的功能的用户提供一个前端。谢谢
【参考方案1】:
你可以这样做
FrontEnd frontEnd =
while ((line = stream.readLine()) != null)
//incoming data
// notify immediately.
frontEnd.displayLine(line);
displayLine 的作用取决于您对该类的实现。您能否详细说明该课程对这些信息所做的工作?
它可以做的是
private final BlockingQueue<String> linesQueue = ...
public void displayLine(String line)
linesQueue.add(line);
// somewhere else, in another thread.
String line = linesQueue.take(); // wait for a line.
String line = linesQueue.poll(); // get the next or null
【讨论】:
哦,这个后台记录器线程真的是我想要的,谢谢它会解决我的问题! @Johnydep 要么使用单例(如果你只有一个前端或读取线程),要么在启动前将前端作为参数传递给读取线程。以上是关于在java中实时将IO Process的值传递给另一个类的主要内容,如果未能解决你的问题,请参考以下文章
如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]
如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?
如何将嵌入式collectionView中选定单元格的值传递给另一个viewController?