Hey,
also ich habe das Coding mal um eine Konsolenausgabe des Arrays erweitert und auch das printStackTrace eingefügt.
Hier mal meine Ergebnisse zu deinen Tipps:
[ul]
[li]Das ResultSet habe ich mit System.out.println(rs.getObject(1)); geprüft und erhalte als Konsolenergebnis net.ucanaccess.jdbc.UcanaccessBlob@3e3fd5a2. Dies bedeutet doch, dass ein Ergebnis vorliegt, oder? Meine DB-Connection funktioniert eigentlich, da ich auch andere Methoden drauf connecten lasse, welche nur Text oder Zahlen liefern.[/li][li]Ja, die Abfrage habe ich schon in Access geprüft und habe auch ein Ergebnis erhalten. Zwar nur ein “Package”, wo ich aber mit Doppelklick das Bild erhalten habe. Bin mir daher nicht sicher, ob beim DB-Abruf wirklich die Bilddatei übergeben wird oder nur eine Verlinkung, sodass das Bild deshalb nicht angezeigt wird.[/li][li]Der Spaltenname hat folgenden Grund: In der Maske wählt man das Bauteil und das Modell per JComboBox aus. Bauteilnummer (oid) und Modellnummer (bid) werden dann übergeben und das passende Bild wird dann aufgerufen. Es gibt nur zwei Modelle, daher hat ein Datensatz eines Bauteils zwei Spalten mit jeweils den passenden Bildern.[/li][li]Ja, wenn die Methode aufgerufen wird, wird eine NullPointerException ausgelöst an der Stelle, wo das Bild das erste Mal verwendet werden soll.[/li][/ul]
Hier mal das angepasste Coding.
public BufferedImage getBild(String oid, String bid)
{
Connection con;
Statement st;
ResultSet rs;
String query;
ImageIcon ico = null;
BufferedImage image = null;
try
{
query = "SELECT O_Bild_" + bid + " FROM Fehlerort WHERE O_ID = '" + oid + "'";
con = DriverManager.getConnection(db);
st = con.createStatement();
rs = st.executeQuery(query);
if(rs.next())
{
byte[] imagedata = rs.getBytes(1);
System.out.println(rs.getObject(1));
System.out.println(imagedata);
try
{
InputStream in = new ByteArrayInputStream(imagedata);
image = ImageIO.read(in);
}
catch(Exception ex)
{
ex.printStackTrace();
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(new JFrame(), "Kein Bild für diese Fehlerort/Baureihen-Kombination vorhanden.
Bitte wenden Sie sich an den Administrator über 'Hilfe' -> 'Kontakt'.", "Fehler", JOptionPane.ERROR_MESSAGE);
}
}
rs.close();
st.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return image;
}
Und der Code aus der anderen Klasse, wo der Fehler ausgelöst wird:
Datenbankschnittstelle db = new Datenbankschnittstelle();
BufferedImage img = db.getBild(oid, bid); // Bild wird aus DB geholt
imageResized = img.getScaledInstance((int) bildBreite, (int) bildHoehe, Image.SCALE_SMOOTH); // Fehler wird ausgelöst
bufferedImageOptimized = new BufferedImage((int) bildBreite, (int) bildHoehe, BufferedImage.TYPE_INT_ARGB);
bufferedImageOptimized.getGraphics().drawImage(imageResized, 0, 0, null);
Hier mal die Fehlerausgabe. Bilder.java:114 ist hier der Aufruf " imageResized = img.getScaledInstance((int) bildBreite, (int) bildHoehe, Image.SCALE_SMOOTH); // Bild wird nicht angezeigt".
net.ucanaccess.jdbc.UcanaccessBlob@3e3fd5a2
[B@e0e47b4
java.lang.NullPointerException
at risikoverwaltung.model.Bilder.<init>(Bilder.java:114)
at risikoverwaltung.view.RisikoGUI.actionPerformed(RisikoGUI.java:667)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.WaitDispatchSupport$2.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(Unknown Source)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at risikoverwaltung.view.RisikoGUI.<init>(RisikoGUI.java:586)
at risikoverwaltung.view.LadeGUI.actionPerformed(LadeGUI.java:1781)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Vielen Dank nochmal!
*** Edit ***
Ich hab nochmal geprüft: Alles, was nach image = ImageIO.read(in); mit image passieren soll, wirft eine NullPointerException, obwohl der InputStream in einen Inhalt besitzt…