我是新来的,我是Java编程的新手,但我不得不注册只是为了问你,因为它困扰了我好几天。 无论如何,我正在编写TCP客户端。我创建了两个线程:一个用于从System.in读取并发送到套接字,另一个用于从套接字读取并写入System.out。 这工作正常,但现在我需要制作一个GUI,我知道如果我想保持我的GUI交互,我需要使用任务和/或服务,但我不知道如何使我的线程作为服务。 这是代码(在终端中工作):
public static class ReadThread extends Thread
{
BufferedReader in;
String word;
ReadThread(BufferedReader in)
{
this.in = in;
}
@Override
public void run()
{
try {
while((word = in.readLine()) != null)
System.out.println(word);
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
与此类似,我制作了WriteThread,但我不想让这篇文章变得凌乱...... 无论如何,当我尝试将其作为服务实现时,我不得不在“最终”中产生一些其他错误,依此类推。 如果你能帮我解决我的特殊情况,我会很感激因为我可能会阅读本网站上的所有JavaFX GUI问题哈哈 提前致谢,对不起,发帖很长! :d
答案 0 :(得分:1)
这就是我实现服务的方式
public class ReadService extends Service {
BufferedReader in;
String word;
@Override
protected Task createTask() {
return new Task() {
@Override
protected Object call() throws Exception {
try {
while((word = in.readLine()) != null)
System.out.println(word);
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
};
}
public BufferedReader getIn() {
return in;
}
public void setIn(BufferedReader in) {
this.in = in;
}
}
您必须致电您的服务。
ReadService readService = new ReadService();
readService.setIn(//HEre your in);
readService.restart();
您还可以在服务启动,取消,失败,完成时添加一些处理程序......
readService.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent workerStateEvent) {
// Here the finish action
}
});
它