Hallo zusammen,
heute habe ich mal eine Methode, das interessanterweise in einer Java-Klasse funktioniert, in einer anderen nicht.
In meiner GUI.java wird ein Bild als BufferedImage eingelesen:
Die Konsole wirft mir KEIN "Problem beim Einlesen" hin.
--> ImageIO.read(inputFile) sollte wohl erfolgreich gewesen sein?
beim Ausführen von
wirft er mir eine
"Exception in thread "main" java.lang.NullPointerException
at de.systeccomputer.ocr.ImagePanel.resizeThumb(ImagePanel.java:45)
at de.systeccomputer.ocr.ImagePanel.setImage(ImagePanel.java:76)
at de.systeccomputer.ocr.GUI.<init>(GUI.java:31)
at de.systeccomputer.ocr.GUI.main(GUI.java:72)"
Hier der Code meiner Klasse ImagePanel:
heute habe ich mal eine Methode, das interessanterweise in einer Java-Klasse funktioniert, in einer anderen nicht.
In meiner GUI.java wird ein Bild als BufferedImage eingelesen:
Java:
package de.systeccomputer.ocr;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class GUI {
JFrame mainFrame;
ImagePanel scanPanel;
Dimension d;
BufferedImage scan;
File inputFile;
//######### Constructor ###################################
public GUI(){
initComponents();
addComponents();
try{
inputFile = new File("c://a.tif");
scan = ImageIO.read(inputFile);
}catch(Exception e){System.out.println("Problem beim Einlesen");}
scanPanel.setImage(scan);
}
//######### Methods #######################################
public void initComponents() {
d = Toolkit.getDefaultToolkit().getScreenSize();
mainFrame = new JFrame(Strings.APPNAME);
mainFrame.setSize(Settings.FRAMEWIDTH, Settings.FRAMEHEIGHT);
mainFrame.setLayout(null);
mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
mainFrame.setResizable(false);
mainFrame.setLocation((int) ((d.getWidth() - mainFrame.getWidth()) / 2),(int) ((d.getHeight() - mainFrame.getHeight()) / 2));
mainFrame.setVisible(true);
scanPanel = new ImagePanel(null, this);
scanPanel.setSize(mainFrame.getContentPane().getWidth(), mainFrame.getContentPane().getHeight());
scanPanel.setLocation(0,0);
scanPanel.setVisible(false);
}
//#########################################################
public void addComponents() {
mainFrame.add(scanPanel);
}
public static void main(String[] args) {
new GUI();
}
}
Die Konsole wirft mir KEIN "Problem beim Einlesen" hin.
--> ImageIO.read(inputFile) sollte wohl erfolgreich gewesen sein?
beim Ausführen von
Java:
scanPanel.setImage(scan)
"Exception in thread "main" java.lang.NullPointerException
at de.systeccomputer.ocr.ImagePanel.resizeThumb(ImagePanel.java:45)
at de.systeccomputer.ocr.ImagePanel.setImage(ImagePanel.java:76)
at de.systeccomputer.ocr.GUI.<init>(GUI.java:31)
at de.systeccomputer.ocr.GUI.main(GUI.java:72)"
Hier der Code meiner Klasse ImagePanel:
Java:
package de.systeccomputer.ocr;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
private static final long serialVersionUID = 1L;
private BufferedImage image = null;
double fakX;
double fakY;
int diffX;
int diffY;
int factor;
Point curLoc;
Rectangle[] rectangles;
Rectangle curRect;
GUI gui;
public ImagePanel(BufferedImage image, GUI gui) {
if(image != null) {setImage(image);}
this.gui = gui;
if(image != null) {
fakX = (double) image.getWidth() / (double) this.getWidth();
fakY = (double) image.getHeight() / (double) this.getHeight();
}
}
public BufferedImage resizeThumb(BufferedImage orig) {
factor = 1;
System.out.println(orig);
if(orig.getWidth() <= 2000) { }
if(orig.getWidth() > 2000 && orig.getWidth() <= 4000 ) { factor = 2; }
if(orig.getWidth() > 4000 && orig.getWidth() <= 6000 ) { factor = 4; }
if(orig.getWidth() > 6000 ) { factor = 6; }
BufferedImage resizedImage = new BufferedImage(orig.getWidth()/factor, orig.getHeight()/factor, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(orig, 0, 0, orig.getWidth()/factor, orig.getHeight()/factor, null);
g.dispose();
return resizedImage;
}
public void setImage(BufferedImage orig) {
this.image = resizeThumb(orig);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
g.setColor(Settings.CELLCOLOR);
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
}
}
}
}
Zuletzt bearbeitet: