gpt4 book ai didi

java - javaFX 任务返回的输入流为空

转载 作者:行者123 更新时间:2023-11-30 04:08:08 24 4
gpt4 key购买 nike

这两天我一直在为这个问题苦苦挣扎。我想做的是使用任务加载远程图像并显示它们。

FXMLController 将调用需要图像数量(XX)的任务,任务类将加载 example.com/1.png example.com/2.png 到 example.com/XX.png。每个图像将作为输入流添加到列表中,该输入流将在任务结束时返回。然后,任务的 onsucceed 方法将为列表中的每个项目创建带有新图像的新 ImagView。

我的代码仅加载一张图像:

Controller 类

    Task task = new MyTask();
Thread th = new Thread(task);
th.setDaemon(true);
task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {

@Override
public void handle(WorkerStateEvent t) {
List<InputStream> list = (List<InputStream>) t.getSource().getValue();
ImageView iv = new ImageView();
iv.setImage(new Image(list.get(0)));
ap.getChildren().add(iv);
.......
.......

任务类别

public class MyTask extends Task<List> {

List<InputStream> list = new ArrayList<InputStream>();


@Override
protected List<InputStream> call() throws Exception {
.......
*-*-*-code to login to website to get image with httpclient-*-*-*

CloseableHttpResponse response1 = httpClient.execute(httpGet);
try {
HttpEntity entity1 = response1.getEntity();
InputStream inputStream = entity1.getContent();
list.add(inputStream);
//inputStream has correct image which I verified by
//writing the stream to file
.......
.......
return list;

我的问题是图像未显示。进一步调查后,列表中的输入流为空。我尝试直接返回一个输入流而不使用列表,但输入流仍然是空的。

(inputstream.isAvailable() 返回 -1,这让我相信它是空的。)我的任务具有正确的输入流,我通过将流写入文件来验证它。

这里可能出了什么问题?

最佳答案

我认为您的输入流在您的任务中已关闭,因此此后您无法再访问它们。为了使其工作,您可以读取任务中的 InputStream 对象,然后为每个对象写入一个 Base64 字符串值。然后,您将它们从回调中的任务返回到 GUI 线程,从 Base64 字符串实例化一个 InputStream,然后就可以创建图像。

关于java - javaFX 任务返回的输入流为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20267041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com