2017-06-20 24 views
0

私はImageManagerのメソッドaddImageを作成して、Pictureクラスのインスタンスを作成し、それをArrayListに追加しました。 imageManager.addImage("title,image,"Arizona","a;ldkjsf;kasjdf"); を使用してrunクラスから画像を追加するとうまくいきます。インスタンスが配列リストに格納されていません

しかし、あなたがParserクラスからの画像を、画像を追加するときImageManagerクラスのArrayListaddImage方法とgetImagesメソッドの呼び出しの間Parserクラスから作成されたイメージを失うが、MainViewControllerクラスによって作成されたインスタンスを失うことはありません。 。なぜこれをやっているのですか?どうすれば修正できますか?

public class Run { 
    public static void main(String[] args){ 
     Parser parser = new Parser(); 
     ImageManager imageManager = new ImageManager(); 
     imageManager.addImage("title", "location","description"); 
     parser.parsePictureData(); 
     imageManager.getImages(); 
    } 
} 

public class Parser { 

ImageManager imageManager = new ImageManager(); 
Document document; 

public void parsePictureData() { 
    try{ 
     readXMLFile(); 
     readImageFromDocument(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
    } 
} 

private void readXMLFile() throws IOException, SAXException, ParserConfigurationException { 
    File file = new File(System.getProperty("user.dir")+"/src/"+"test.xml"); 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    document = builder.parse(file); 
} 

private void readImageFromDocument() { 
    NodeList pictureNodes = document.getElementsByTagName("picture"); 
    for(int i = 0; i<pictureNodes.getLength();i++){ 
     Node pictureNode = pictureNodes.item(i); 
     if(pictureNode.getNodeType()==Node.ELEMENT_NODE){ 
      Element pictureElement = (Element) pictureNode; 
      String location =pictureElement.getAttribute("location"); 
      String imagePath = pictureElement.getElementsByTagName("path").item(0).getTextContent(); 
      String title = pictureElement.getElementsByTagName("title").item(0).getTextContent(); 
      String description = pictureElement.getElementsByTagName("description").item(0).getTextContent(); 

      imageManager.addImage(title,location,description); 
     } 
    } 
} 

} 

public class ImageManager { 

ArrayList<Pictures> images = new ArrayList<>(); 

public void addImage(String title, String location, String description){ 
    Pictures newImage = new Pictures(title, location, description); 
    images.add(newImage); 
    System.out.println("1"+images); 
} 

public ArrayList<Pictures> getImages(){ 
    System.out.println("2"+images); 
    return images; 
} 

} 

public class Pictures{ 

private String title; 
private String location; 
private String description; 


public Pictures(String title, String location, String description){ 
    this.title = title; 
    this.location = location; 
    this.description = description; 
} 
} 
+4

MVCE(最小限の検証可能な完全な例)はより良いでしょう – efekctive

+3

@efecctive FYI [mcve]を取得するために[mcveの周りに置くことができます] –

+0

MCVE – goobs14

答えて

0

JavaFX Imageは、1つのシーングラフでのみ使用できます。 ImageViewを保存し、Image image = new Image(imageView);経由でImageを作成してください。同じImageViewから複数のImagesを作成することができます。

関連する問題