2017-01-22 3 views
0

Ich arbeite an einer E-Commerce-Anwendung mit JavaFX, ich benutze SQL Server 2014 und ich konnte Bild aus der Datenbank nicht abrufen. Ich verwende eine for-Schleife, um alle Werte der Datenbank in einem Rasterbereich hinzuzufügen. Das Bild sollte sich in der Mitte des Rasterbereichs befinden, wobei der Produktname und der Preis unten angezeigt werden. Ich bekomme jedes Mal eine java.lang.NullPointerException, wenn ich es ausprobiert habe. Könnte mir bitte jemand helfen?javafx Bild von SQL-Server-Datenbank abrufen

BorderPane background[]= new BorderPane[13]; 

     Label productName[]= new Label[13]; 
     Label priceLable[]= new Label[13]; 
     Image image; 
     ImageView imageView; 

    for (int i = 0; i<=12;i++){ 
     background[i]=new BorderPane(); 
     background[i].setStyle("-fx-background-color: rgb(216, 216, 216)"); 
     background[i].setPrefHeight(300); 
     background[i].setPrefWidth(250); 

     try { 

       String query = "select pname,price,manufacturer,pimg from Adulis_product where pid=?"; 
       pst = con.prepareStatement(query); 
       pst.setInt(1, adp.getProduct_id()); 

       rs = pst.executeQuery(); 

       while (rs.next()) { 

        productName[i]=new Label(rs.getString("pname")+" - "+rs.getString("manufacturer")); 
        productName[i].setStyle("-fx-text-fill: #282828"); 
        productName[i].setFont(Font.font(" sans-serif", FontWeight.EXTRA_BOLD,14)); 

        priceLable[i]= new Label(rs.getString("price")); 
        priceLable[i].setStyle("-fx-text-fill: #1da288"); 
        priceLable[i].setFont(Font.font(" sans-serif", FontWeight.EXTRA_BOLD,15)); 
        int finalI2 = i; 

        InputStream is = rs.getBinaryStream("pimg"); 
        OutputStream os= new FileOutputStream(new File("pic.jpg")); 
        byte[] content= new byte[1024]; 
        int size=0; 
        while((size = is.read(content))!=-1){ 

         os.write(content, 0,size); 
        } 
        os.close(); 
        is.close(); 
        image = new Image("file:pic"+i+".jpg", 250,300,false,true); 

        imageView = new ImageView(image); 
        imageView.setFitHeight(300); 
        imageView.setFitWidth(250); 


        VBox prceNmanufactue= new VBox(10); 
        prceNmanufactue.getChildren().addAll(productName[i],priceLable[i]); 
        prceNmanufactue.setPadding(new Insets(0,0,0,5)); 

        Image newp= new Image(getClass().getResourceAsStream("New_30px.png")); 
        ImageView newimv= new ImageView(newp); 

        background[i].setTop(newimv); 

        VBox borderElements= new VBox(5); 
        borderElements.getChildren().addAll(prceNmanufactue,addtocart[i]); 
        background[i].setBottom(borderElements); 

       } 
      } catch (Exception e1) { 
       System.out.println(e1); 
      } 
+0

Bitte bearbeiten Sie die Frage, um den Stack-Trace einzuschließen, und geben Sie an, welche Zeile im Code die Ausnahme auslöst. –

+0

Ich habe bereits die Java-Ausnahme behoben. Die Fehlermeldung wurde gelöscht, nachdem ich die Bilder in die Datenbank eingefügt habe. aber immer noch nicht in der Lage, die Bilder von der Datenbank abzurufen. – ben

+0

Hier ist der Code, den ich verwendet habe, um die Bilder abzurufen – ben

Antwort

0

Sie schreiben, die Bilddaten in eine Datei mit dem Dateinamen pic.jpg:

InputStream is = rs.getBinaryStream("pimg"); 
OutputStream os= new FileOutputStream(new File("pic.jpg")); 
byte[] content= new byte[1024]; 
int size=0; 
while((size = is.read(content))!=-1){ 

    os.write(content, 0,size); 
} 

und dann zu versuchen, aus einer Datei mit einem anderen Namen zu lesen:

image = new Image("file:pic"+i+".jpg", 250,300,false,true); 

So vermutlich Sie beabsichtigt zu tun

OutputStream os= new FileOutputStream(new File("pic"+i+".jpg")); 

Das Kopieren aller Daten in eine Datei, nur um sie wieder einzulesen, ist unglaublich ineffizient. Brauchst du die Datei wirklich? Warum nicht einfach tun

InputStream is = rs.getBinaryStream("pimg"); 
image = new Image(is, 250,300,false,true); 

Sie scheinen auch nichts mit diesem Bild Ansicht zu tun, so dass Sie es bis zu einem gewissen Scheibe irgendwo hinzufügen müssen.