2016-04-21 3 views
1

So brauche ich Klarheit darüber, was ich übersehen habe, wenn es darum geht, einen Standard-Image-Dateipfad festzulegen, wenn ein Benutzer kein Bild auswählt. Ich benutzte JFileChooser in einem Durchsuchen-Button, um den Image-Pfad (relativer Pfad, nicht absolut) zu erhalten, um den Image-Pfad auf einer MySQL Datenbank zu speichern. Das Problem ist mit meiner imageFileUploader Klasse. Ich versuche, ein generisches Bild als Standard festzulegen, wenn der Benutzer kein Bild hochladen möchte. Wenn ich meine imageFileUploader-Klasse teste, erhalte ich eine Nullzeiger-Ausnahme. Ich habe im Wesentlichen das Textfeld "keine Datei hochgeladen" und wenn dies wahr bleibt, dann wird das Standardbild hochgeladen. Kann jemand meinen Code im Auge behalten und mir etwas geben, was ich übersehen habe? Ich wäre sehr dankbar.Verwenden eines Standard-Image-Dateipfades zum Hochladen von Bildern in Java-App

String imagePath = ""; 
      byte[] rawBytes = null; 
      FileInputStream fileInputStream = null; 

      if(imagePath.equals("No File Uploaded")) {//null pointer exeception here!! 
       ClassLoader classLoader = this.getClass().getClassLoader(); 
       URL resources = classLoader.getResource("/abaApplicationImages/blankProfile.jpg"); 
       imagePath = resources.getFile(); 
      }else{ 
       //File fileObject = new File(imagePath); 

      File fileObject = new File(imagePath); 

      try { 
       fileInputStream = new FileInputStream(fileObject); 
      } catch (FileNotFoundException e) { 

       e.printStackTrace(); 
       System.out.println("file not found"); 
      } 

      int imageLength = Integer.parseInt(String.valueOf(fileObject.length())); 
      rawBytes = new byte[imageLength]; 
      try { 
       fileInputStream.read(rawBytes, 0, imageLength); 
      } catch (IOException e) { 

       e.printStackTrace(); 
       System.out.println("IO exception"); 

      } 


     } 
      return imagePath; 
     } 

Fehlermeldung:

java.io.FileNotFoundException: bei java.io.FileInputStream.open (Mutter -Methode) bei java.io.FileInputStream (Unknown Source) bei abaApplication.. ImageUploader.ImageUploader (ImageUploader.java:30) bei abaApplication.ImageUploader.main (ImageUploader.java:59) -Datei nicht Exception in thread "main" java.lang.NullPointerException bei abaApplication.ImageUploader.ImageUploader gefunden (ImageUploader.java : 40) unter abaAppl ication.ImageUploader.main (ImageUploader.java:59)

+0

Veröffentlichen Sie die Ausnahmebedingungsnachricht zu –

+0

Für alle Neugierigen ist dies die Ausnahmebedingungsnachricht, die ich erhalte, wenn das Programm ausgeführt wird. – Murk

+0

java.io.FileNotFoundException: \t bei java.io.FileInputStream.open (native Methode) \t bei java.io.FileInputStream. (Unknown Source) \t bei abaApplication.ImageUploader.ImageUploader (ImageUploader.java:30) \t bei abaApplication.ImageUploader.main (ImageUploader.java:59) Datei nicht Exception in thread "main" java.lang gefunden. Nullpointer \t bei abaApplication.ImageUploader.ImageUploader (ImageUploader.java:40) \t bei abaApplication.ImageUploader.main (ImageUploader.java:59) – Murk

Antwort

1

Sie die Überprüfung nicht, wenn die URL resources null ist oder nicht. Hier kommt wahrscheinlich die NPE her.

Auch ClassLoader.getResource() lädt Ressource aus dem Klassenpfad, wenn die Datei auf der Image-Datei nicht auf Classpath ist, dann sollten Sie wahrscheinlich FileInputStream direkt verwenden.

+0

@ 11dimension, mein Gedanke war, dass das Standardbild in den Klassenpfad oder den relativen Pfad für den Standardspeicher für Bilder gehen würde gehe ich das falsch herum? Und können Sie etwas mehr über die URL-Ressourcen herausfinden, die null sind? – Murk

+0

Wenn 'getResource()' die Ressource nicht finden kann, gibt sie null zurück. Dies ist wahrscheinlich die Ursache von NPE, da es den Pfad nicht finden kann, so dass 'resources.getFile()' NPE generiert. Wenn sich die Datei im Klassenpfad befindet, ist es in Ordnung, diese Methode zu verwenden. Ansonsten verwenden Sie die normalen FileIO-Methoden. Normalerweise wird 'getResource()' verwendet, um Dateien innerhalb der gepackten JAR- oder WAR-Datei zu lesen. – 11thdimension

+0

Direkt an. Danke für die Eingabe. Ich werde mehr über die getResource und ClassLoader lesen. Ich gehe davon aus, dass ich beim Lesen über etwas etwas ausgesehen habe, da meine Logik ein wenig daneben zu liegen scheint. Sehr geschätzt! – Murk