Compiler-Fehler Unknown Source?

  • Themenstarter Themenstarter JJayJJay
  • Beginndatum Beginndatum
J

JJayJJay

Gast
Hallo. Ich hoffe, jemand kann mir wieterhelfen.

Ich bin noch ein Anfänger in Java. Jetzt mache ich für die Arbeit ein Programm, welches eine Excel-Datei öffnet und darin arbeitet. Dazu verwende ich Apache POI.
Nachdem es mir nun endlich gelungen ist, jenes einzubauen, habe ich Probleme mit den Fehlermeldungen.

Das ist die Fehlermeldung:
Java:
fname C:\test\TestdateiNotizen.xls
java.io.FileNotFoundException: 
Pfad nicht gefunden.
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(Unknown Source)
	at java.io.FileInputStream.<init>(Unknown Source)
	at HauptfensterEditor.pb_verarbeiten_for_MouseClicked(HauptfensterEditor.java:299)
	at HauptfensterEditor$MyMouseAdapter.mouseClicked(HauptfensterEditor.java:223)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$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)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at org.apache.poi.util.IOUtils.readFully(IOUtils.java:52)
	at org.apache.poi.util.IOUtils.readFully(IOUtils.java:37)
	at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:73)
	at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:84)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:257)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:238)
	at HauptfensterEditor.pb_verarbeiten_for_MouseClicked(HauptfensterEditor.java:306)
	at HauptfensterEditor$MyMouseAdapter.mouseClicked(HauptfensterEditor.java:223)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$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)

und hier ist der entsprechende Code-Teil:
Java:
 // java.awt.event
	class MyMouseAdapter extends MouseAdapter {
		public void mouseClicked(MouseEvent event) {

			Object object = (Object) event.getSource();
			if (object == btEinlesen) {
				pb_einlesen_for_MouseClicked();
			} else if (object == btVerarbeiten) {
				pb_verarbeiten_for_MouseClicked();
			} else if (object == btNachbearbeiten) {
				pb_nachbearbeiten_for_MouseClicked();
			} else if (object == btDetails) {
				pb_details_for_MouseClicked();
			} else if (object == btAktualisieren) {
				pb_aktualisieren_for_MouseClicked();
			} else if (object == btSchliessen) {
				pb_schliessen_for_MouseClicked();
			} else
				System.out.println("Fehler.");
		}
	}

	// methods

	// Auswählen der Datei und Einlesen in Excel
	void pb_einlesen_for_MouseClicked() {

		btEinlesen.addActionListener(this);

		setTitle("Einlesen und Verarbeiten");
		setSize(650, 440);
		setVisible(true);
		// ein shortcut zum Schließen
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				//dispose();
				System.exit(0);
			}
		});
	}

	public void actionPerformed(ActionEvent e) {
		fd1.setVisible(true);
		lab1.setText("Directory: " + fd1.getDirectory());
		display(fd1.getDirectory() + fd1.getFile());
	}

	public void display(String fname) { // Pfad auslesen
		try {
			FileInputStream fis1 = new FileInputStream(fname);
			int fileSize = fis1.available();
			byte buf1[] = new byte[fileSize];
			fis1.read(buf1);
			String str1 = new String(buf1);
			ta1.setText(str1);
		} catch (IOException e) {
			//dispose();
			System.exit(0);
		}
		// if (FileDialog.getFile() == null) {
		// dispose();
		// }
		System.out.println("fname " + fname);

		try {
			// Runtime.getRuntime().exec("c:\\test\\TestdateiNotizen.xls");
			// System.out.println(new
			// File("c:\\test\\TestdateiNotizen.xls").exists() ? true : false);
			Process p = Runtime.getRuntime().exec(
					"rundll32 url.dll,FileProtocolHandler " + fname);
			// Process p =
			// Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "
			// + "c:\\test\\TestdateiNotizen.xls");
		} catch (Exception err) {
			//dispose();
			err.printStackTrace();
		}
	}

	// Formatieren und Rechnen
	void pb_verarbeiten_for_MouseClicked() {
		HSSFWorkbook wb;
		FileInputStream input = null;
		try {
			input = new FileInputStream(fname);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("Pfad nicht gefunden.");
			e.printStackTrace();
		}
		try {
			wb = new org.apache.poi.hssf.usermodel.HSSFWorkbook(input);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("Pfad konnte nicht erfolgreich übernommen werden.");
			e.printStackTrace();
		}
	}

Die Fehlermeldung "Pfad nicht gefunden." trifft glaube ich nicht zu, da es nur das ist, was ich bei Fehlschlag ausgeben lasse. Der Pfad stimmt auch auf jeden Fall, da ich mit dem Einlesen-Button die Datei öffnen kann. Sie jetzt mit dem POI auszuwählen ist das Problem. Da steht auch ständig Source nicht gefunden und wenn ich auf diese "Native Method" klicke, möchte er nen Pfad für die Source. Ich hab ihm den dann gegeben, wo die Sachen bei mir liegen, löst das Problem anscheinend aber nicht. :/
Eingebunden als Librarie sind sie eigentlich auch, also hat er den Pfad doch eigentlich??

Hat jemand die zündende Idee? 🙂
 
Doch, du bekommst eine FileNotFoundException in der Methode pb_verarbeiten_for_MouseClicked, also ist der Pfad falsch.
Die NullPointerException resultiert daher, dass input dort dann null ist.
 
Also ist dieses
Code:
FileInputStream input = null;
schonma verkehrt?

Aber warum ist der Pfad falsch? Der Pfad ist im String fname gespeichert und der String wird dann übernommen. Oder Speichert er den String in fname nur während des Buttons "Einlesen" und für den Button "Verarbeiten" ist das dann weg??
Was müsste ich denn dann tun, damit er das speichert?
 
ganz schön verfahrene Fehlerbeschreibung, aber bleiben wir bei den Fakten:
du hast zwar eine Ausgabe der fname-Variable, aber die steht wer weiß wo in einer anderen Methode, die in einem anderen Objekt derselben Klasse ausgeführt sein könnte, außerdem bezieht sie sich dort auf den gleichnamigen Parameter,
nicht unbedingt ein Instanzattribut fname, denn darum geht es doch oder?

was fname in der Methode pb_verarbeiten_for_MouseClicked() ist, diese alles entscheidene Info läßt du weg,
allein die Deklaration, vor allem aber auch den Inhalt, ein einfaches System.out.println() direkt vor der Verwendung oder im catch würde so vieles so viel deutlicher erklären,
aber ne, weggelassen 😉
-----

immerhin gibts ja die Fehlermeldung, und die sagt eigentlich ziemlich deutlich durch Nichts-Sagen, dass fname im Moment einen Leerstring enthält, oder ein String nur mit nichtsichtbaren Zeichen,
vergleiche folgendes Programm:
Java:
public class Test
{
    public static void main(String[] args)
    {
        check("C:/dummy");
        check(null);
        check("");
        check(" ");
    }

    static void check(String x)
    {
        try
        {
            System.err.println("gleich FIS mit " + x + "|");
            new FileInputStream(x);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
Ausgabe:
Code:
gleich FIS mit C:/dummy|
java.io.FileNotFoundException: C:\dummy (Das System kann die angegebene Datei nicht finden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
	at test.Test.check(Test.java:21)
	at test.Test.main(Test.java:10)
gleich FIS mit null|
java.lang.NullPointerException
	at java.io.FileInputStream.<init>(FileInputStream.java:103)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
	at test.Test.check(Test.java:21)
	at test.Test.main(Test.java:11)
gleich FIS mit |
java.io.FileNotFoundException:                      [Ausgabe wie bei dir!]
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
	at test.Test.check(Test.java:21)
	at test.Test.main(Test.java:12)
gleich FIS mit  |
java.io.FileNotFoundException:   (Das System kann den angegebenen Pfad nicht finden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
	at test.Test.check(Test.java:21)
	at test.Test.main(Test.java:13)

> Was müsste ich denn dann tun, damit er das speichert?

du hantierst mit Listener, Stream und wer weiß was alles,
die Grundlagen zur Speicherung einer Variablen hast du aber übersprungen?
oder willst du doch noch erstmal 5 Min. nachdenken?
 
So. public variable eingefügt, fname hineinübertragen und es gibt keine Fehlermeldung mehr (per weiteren System.out.println-Befehlen weiß ich auch, dass er ganz durchläuft).

Ich sage vielen lieben Dank an euch. 🙂

P.S.: >> Was müsste ich denn dann tun, damit er das speichert?

>du hantierst mit Listener, Stream und wer weiß was alles,
>die Grundlagen zur Speicherung einer Variablen hast du aber übersprungen?
>oder willst du doch noch erstmal 5 Min. nachdenken?

Nur damit du mich besser verstehst: Ich hatte vor etwa einem Monat das erste Mal mit Java zu tun. Das war ein zweiwöchiges Seminar. Natürlich waren das nur Grundlagen, nix mit Stream, nix mit POI oder so etwas. Den Listener nur kurz angerissen. Und jetzt soll ich so ein Programm schreiben. Du kannst dir aufgrund dessen vllt etwas besser denken, wie wirr es in meinem Kopf aussieht. Da kann es schonma passieren, dass man einen dummen Fehler macht, meinst du nicht? =)

So, nochmal danke. 😉
 

Zurück
Oben