2017-01-22 5 views
0

JavaFXを使用して電子商取引アプリケーションで作業していますが、SQL Server 2014を使用していてデータベースからイメージを取得できませんでした。 forループを使用して、グリッドペインにデータベースのすべての値を追加しています。画像はグリッドペインの中央にあり、製品名と価格は下部に表示されていました。私は試してみるたびにjava.lang.NullPointerExceptionを取得します。誰でも私を助けてくれますか?javafxがSQL Serverデータベースからイメージを取得します

ファイル名 pic.jpgでファイルに画像データを書き込んでいる
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

スタックトレースを含めるために質問を編集し、例外をスローしているコードの行を指定してください。 –

+0

私は既にJava例外を修正しました。イメージをデータベースに挿入すると、エラーメッセージが消えてしまいました。依然としてデータベースから画像を取り出すことができない。 – ben

+0

ここでは、画像を取得するために使用したコードを示します。 – ben

答えて

0

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); 
} 

、その後、別の名前でファイルから読み取るしようとしている:

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

だから、おそらくあなたは意図するもの:

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

すべてのデータをファイルにコピーするだけで、それを再び読み込むことは非常に非効率的です。ファイルが本当に必要ですか?何もしないでください

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

この画像ビューでは何もしないようですので、どこかのペインに追加する必要があります。

関連する問題