저는 지난 2 일 동안이 작업에 어려움을 겪었습니다. 내가 뭘 하려는지 작업을 사용하여 원격 이미지를로드하고 그들을 표시합니다.javaFX 작업에서 반환 된 입력 스트림이 비어 있습니다.
FXMLController는 이미지 수 (XX)가 필요한 작업을 호출하고 작업 클래스는 example.com/1.png example.com/2.png example.com/XX.png까지로드합니다. 각 이미지는 입력 스트림으로 List에 추가되며 작업 마지막에 반환됩니다. 작업의 onsucceed 메서드는 목록의 각 항목에 대한 새로운 이미지로 새로운 ImagView를 만듭니다. 로딩 하나 개의 이미지에 대한
가내 코드 :
컨트롤러 클래스
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 만 반환하려고 시도했지만 inputsteram은 여전히 비어 있습니다.
(inputstream.isAvailable()은 -1을 반환하여 비어있게 만듭니다.) 내 작업에 스트림을 파일로 쓰는 것으로 확인한 올바른 입력 스트림이 있습니다.
무엇이 잘못 될 수 있습니까?
작업의 failed()를 재정의하고 다음 행을 추가 할 수 있습니까? System.out.println (this.exceptionProperty(). getValue()); 때때로 이것은 작업 클래스에서 버그 나 누락 된 예외를 찾는 데 도움이됩니다. – denhackl
@denhackl 행운이 없습니다. – amol
MyTask에서 InputStream이 올바른가? call() 구현에서 새로운 Image (inputStream)를 시도 했습니까? (GUI를 만들지 않고, 거기에서 동일한 오류가 있는지 확인하기 위해). – zenbeni