tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
649
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    AvS AvS ist offline
    Registriert seit
    Mar 2002
    Ort
    borken|nrw
    Beiträge
    367
    Hallo,

    erstmal zur Einleitung : Ich habe ein Projekt mit 3 Packages(main, data, functions), in denen wiederum mehrere Klassen stehen. Nun habe ich in einer Klasse aus dem Package main einen Funktionsaufruf gestartet, die wiederum eine andere Funktion aus einem anderen Package ausführt, diese führt allerdings wieder eine andere Funktion aus dem dritten Package aus.
    Allerdings bekomme ich eine ClassNotFoundException. Alles ist public und alle Packages sind richtig importiert (sonst würde Eclipse mir das ja anzeigen, dass was fehlt).

    Hoffe ihr wisst woran es liegen kann. Bei Bedarf füge ich noch die jeweiligen Code-Schnipsel ein
     
    cash rules everything around me

  2. #2
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Zeig mal den Stack Trace der Exception. Und wenns geht das Codestückchen welches in der Exception genannt ist.
     

  3. #3
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    steht denn alles richtig im ClassPath ?

    gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  4. #4
    kiddo kiddo ist offline Rookie
    Registriert seit
    May 2009
    Beiträge
    8
    und schau mal nach, ob die imports alles stimmen! Aber wie bereits erwähnt: den StackTrace der Exception bitte posten.
     

  5. #5
    AvS AvS ist offline
    Registriert seit
    Mar 2002
    Ort
    borken|nrw
    Beiträge
    367
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
    java.lang.ClassNotFoundException: Worte
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at java.io.ObjectInputStream.resolveClass(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at java.util.ArrayList.readObject(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at data.WhiteList.loadWL(WhiteList.java:43)
        at functions.Search.compareWL(Search.java:108)
        at graphics.SemHMenu$4.actionPerformed(SemHMenu.java:102)
        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.AbstractButton.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.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.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)
     
    cash rules everything around me

  6. #6
    AvS AvS ist offline
    Registriert seit
    Mar 2002
    Ort
    borken|nrw
    Beiträge
    367
    Niemand eine Idee ?
     
    cash rules everything around me

  7. #7
    Tim Bureck Tim Bureck ist offline Mitglied Platin
    Registriert seit
    Apr 2009
    Ort
    Düsseldorf (NRW)
    Beiträge
    508
    Jetzt wäre der Code vielleicht noch hilfreich.
     

  8. #8
    AvS AvS ist offline
    Registriert seit
    Mar 2002
    Ort
    borken|nrw
    Beiträge
    367
    Okay,

    hier die Code-Ausschnitte in der Folge, wie sie aufgerufen werden :

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
                public void actionPerformed(ActionEvent ev) {
     
                    JFileChooser fileChooser = new JFileChooser(
                            "../Lesehilfe/src/txtressourcen");
     
                    if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                        try {
                            JTextArea Tg = new JTextArea();
                            File selectedFile = fileChooser.getSelectedFile();
     
                            Tg.read(new FileReader(selectedFile), null);
                            dataField.TA.setText(Tg.getText());
                            Search.compareWL();
                        } catch (IOException ex) {
                            // CenterMiddlePanel.putText( ex.getMessage() );
                        }
                    }
                }

    Die Search.compareWL() sieht so aus :

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    public static String compareWL() throws IOException {
            ArrayList<Worte> liste = WhiteList.loadWL();
            
            String t = "";
            
            String inhalt = dataField.TA.getText();
            for(Worte inhalte : liste)
            {
                if(inhalte.getName().equals(inhalt)) {
                    t = t + inhalte + " \n";
                    wordField.addString(t);
     
                }
            }
            return null;
        }

    und die WhiteList.loadWL() so :

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    public static ArrayList<Worte> loadWL() throws IOException
        {
            try
            {
                FileInputStream fis = new FileInputStream("whitelist.ser");
                ObjectInputStream ois = new ObjectInputStream(fis);
                ArrayList<Worte> words = new ArrayList<Worte>();
                words = (ArrayList<Worte>) ois.readObject();
                ois.close();
                return words;
                }catch(ClassNotFoundException e)
            {
                e.printStackTrace();
            }
            return null;        
        }
     
    cash rules everything around me

  9. #9
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Von wann ist denn die Serialisierte Datei? Hast du seitdem etwas geändert? Liegt das ganze überhaupt in Packages?
     

  10. #10
    AvS AvS ist offline
    Registriert seit
    Mar 2002
    Ort
    borken|nrw
    Beiträge
    367
    Ja, es liegt alles in Packages und die sind auch richtig importiert (zumindest zeigt mir Eclipse keine Fehler! diesbezüglich).
    Die SUID ist schon etwas älter, dürfte aber danach keine Veränderungen danach gemacht haben. Wie kann ich denn selber eine erzeugen ? Die jetzige wurde automatisch eingesetzt.

    Gruß

    Edit : Der ClassNotFound-Fehler wird durch diese Zeile aufgerufen :

    Code java:
    1
    
     words = (ArrayList<Worte>) ois.readObject();

    Aber ich verstehe einfach nicht wieso ! Ich habe alle Objekte auch als ArrayList serialisiert, daher sollte die Deserialiserung auch so ablaufen oder ?

    Zusatz : Die Datei whitelist.ser wurde allerdings mit einem anderen Projekt erstellt. Liegt dort die Fehlerquelle ? Also das Sachen mitserialisiert wurden, die das neue Programm nicht auswerten kann ?
    Geändert von AvS (11.05.09 um 18:15 Uhr)
     
    cash rules everything around me

  11. #11
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Du kannst nur Objekte aus ein und der selben Klasse serialisieren und wieder deserialisieren. Ich vermute es wurde eine andere Klasse serialisiert als du versuchst zu deserialisieren. Stimmt denn die Klasse Worte jetzt noch mit der überein, mit der das Objekt damals serialisiert wurde (sind z.B. die serialVersionUids gleich?)?

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  12. #12
    AvS AvS ist offline
    Registriert seit
    Mar 2002
    Ort
    borken|nrw
    Beiträge
    367
    Hi !

    Ich habe die ganze Datei jetzt mal in der main-Funktion des neuen Projekts erzeugt und die Objekte serialisiert. Nun kann ich auch die Methoden ohne Fehler ausführen. Ich versteh das aber nicht so ganz, warum das nun klappt ? Die Klassen waren im Prinzip die gleichen, waren nur in zwei verschiedenen Projekten.
     
    cash rules everything around me

  13. #13
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Hast du die Classfiles kopiert? Das tut nicht. Beim Serialisieren wird ein eindeutiger Identifier mit im Output abgelegt, der beim Serialisieren wieder stimmen muss.

    Gruß
    Ollie
    AvS bedankt sich. 
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  14. #14
    AvS AvS ist offline
    Registriert seit
    Mar 2002
    Ort
    borken|nrw
    Beiträge
    367
    Gut, werd ich mir für die Zukunft merken.

    Vielen Dank
     
    cash rules everything around me

  15. #15
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Keine Ursache. IMHO taugt die eingebaute Objektserialisierung nicht viel. Zumindest nicht zum persistieren von Daten. Für die Kommunikation über die Leitung okay, aber alles andere ist foo. Wenn du sowas mit weniger Fehleranfälligkeit brauchst, solltest du evtl. einen Blick auf OX (object<->Xml) oder OR (object<->relational) Mapper werfen.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

Ähnliche Themen

  1. Antworten: 17
    Letzter Beitrag: 14.05.09, 14:19
  2. Problem beim Serialisieren
    Von d4ex im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 07.03.08, 14:17
  3. Problem beim serialisieren von komplexen Objekten (v.A. GregorianCalendar)
    Von schneemensch im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 5
    Letzter Beitrag: 26.07.07, 08:14
  4. Klassen in DLL serialisieren
    Von Meldur im Forum .NET Datenverwaltung
    Antworten: 3
    Letzter Beitrag: 18.05.06, 12:25
  5. Komplexe Klassen per XML serialisieren
    Von OutCasT im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 24.01.04, 11:35