Veritabanına görüntü eklediğim bir veritabanı uygulaması üzerinde çalışıyorum. Veritabanındaki InputStreams'ı bir BLOB olarak saklıyorum ve bunları almak ve bunları bir ImageIcon'a ayarlamakla ilgili sorunlarım var.Görüntü bloğunu MySQL içine ekleme - NullPointerException
fotoğraflar, döndüğüm Fotoğraf sınıfımı kullanan bir ArrayList'tir. Ben resimleri görüntülemek için denemek her zaman, aşağıdaki hatayı alıyorum ... Aşağıdaki kodu geliyor
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at business.appdev.Home.paintEditFrame(Home.java:577)
..
editImageLabel[i].setIcon(
new ImageIcon(img.getScaledInstance(imageSize, imageSize, imageSize)));
Ben bazı temel println komutları gösteriyor ki beni img bir BufferedImage olan
[email protected]
Retrieving a photo
[email protected]
Retrieving a photo
olan MySQL veritabanından ne dönüyor. Herhangi bir yardım büyük, teşekkürler duyacağız! InputStream işlenmesi için
Kod Resultset döndü
for(int i = 0; i < photos.size(); i++){
img = ImageIO.read(photos.get(i).getInputStream());
editImageLabel[i] = new JLabel("");
editImageLabel[i].setIcon(new ImageIcon(img.getScaledInstance(imageSize, imageSize, imageSize)));
byte [] verilerle güncellenen Fotoğraf sınıfı okudum diğer bazı mesajlar dayanarak , ben depolamak ediyorum bayt [] MySQL'de bir varbin içine. Bundan sonra,
InputStream in = resultSet.getBinaryStream(4);
byte[] photoData = new byte[(int) resultSet.getLong(3)];
ByteArrayOutputStream os = new ByteArrayOutputStream();
for (int len; (len = in.read(photoData)) != -1;)
os.write(photoData, 0, len);
os.flush();
o zaman benim fotoğraf nesnesi oluşturmak ve fotoğraflar bir ArrayList dönmek kullanarak veritabanından fotoğraf verilerini yakala. Bu, NullPointerException'ı ortadan kaldırdı, ancak şimdi ImageIcon JLabels'in görünmesini sağlayamıyorum. Ben bir Jpanel için
InputStream in = new ByteArrayInputStream(photos.get(i).getData());
BufferedImage newImage = ImageIO.read(in);
editImageLabel[i] = new JLabel("");
editImageLabel[i].setIcon(new ImageIcon(newImage.getScaledInstance(imageSize, imageSize, Image.SCALE_DEFAULT)));
eklemek için aşağıdaki kodu kullanabilirsiniz ve sonra Jpanel üzerine Label yerleştirin.
'resultSet.getBinaryStream (index)' herhangi bir veri alıp almadığını kontrol edebilir misiniz? –
Akış işleme kodunu "Photo" sınıfınızda paylaşır mısınız? –
@ AlexandroSifuentesDíaz son kod bölümü resultSet.getBinaryStream (dizin) 'den dönen şeydir. Sadece test amacıyla println komutunda vardı. –