it-swarm.com.de

Eclipse - JAR-Erstellung fehlgeschlagen "Klassendateien im Klassenpfad nicht gefunden oder für ... nicht zugänglich."

Ich habe ein Projekt in Eclipse, das ein rotes Kreuz hat und nicht in ein lauffähiges JAR exportiert werden kann. Ich kann mich nicht erinnern, ob ich es seit der Neuinstallation von Windows auf meinem Laptop angesehen habe, aber ich weiß, dass ich keinen Code geändert habe. Es gibt keine Fehler in einer der Klassen, aber der Fehler, den ich bekomme, zeigt auf die folgende Klasse, die sich auf die Menüelemente unter Mac OSx bezieht:

import Java.lang.reflect.*;

public class osxhandler implements InvocationHandler {

      protected Object targetObject;
        protected Method targetMethod;
        protected String proxySignature;

        static Object macOSXApplication;

        // Pass this method an Object and Method equipped to perform application shutdown logic
        // The method passed should return a boolean stating whether or not the quit should occur
        public static void setQuitHandler(Object target, Method quitHandler) {
            setHandler(new HOsx("handleQuit", target, quitHandler));
        }


    public static void setAboutHandler(Object target, Method aboutHandler) {
        boolean enableAboutMenu = (target != null && aboutHandler != null);
        if (enableAboutMenu) {
            setHandler(new HOsx("handleAbout", target, aboutHandler));
        }
        // If we're setting a handler, enable the About menu item by calling
        // com.Apple.eawt.Application reflectively
        try {
            Method enableAboutMethod = macOSXApplication.getClass().getDeclaredMethod("setEnabledAboutMenu", new Class[] { boolean.class });
            enableAboutMethod.invoke(macOSXApplication, new Object[] { Boolean.valueOf(enableAboutMenu) });
        } catch (Exception ex) {
            System.err.println("MacOSHandler could not access the About Menu");
            ex.printStackTrace();
        }
    }

       public static void setPreferencesHandler(Object target, Method prefsHandler) {
            boolean enablePrefsMenu = (target != null && prefsHandler != null);
            if (enablePrefsMenu) {
                setHandler(new HOsx("handlePreferences", target, prefsHandler));
            }
            // If we're setting a handler, enable the Preferences menu item by calling
            // com.Apple.eawt.Application reflectively
            try {
                Method enablePrefsMethod = macOSXApplication.getClass().getDeclaredMethod("setEnabledPreferencesMenu", new Class[] { boolean.class });
                enablePrefsMethod.invoke(macOSXApplication, new Object[] { Boolean.valueOf(enablePrefsMenu) });
            } catch (Exception ex) {
                System.err.println("MacOSHandler could not access the About Menu");
                ex.printStackTrace();
            }
        }

        // Pass this method an Object and a Method equipped to handle document events from the Finder
        // Documents are registered with the Finder via the CFBundleDocumentTypes dictionary in the 
        // application bundle's Info.plist
        public static void setFileHandler(Object target, Method fileHandler) {
            setHandler(new HOsx("handleOpenFile", target, fileHandler) {
                // Override MacOSHandler.callTarget to send information on the
                // file to be opened
                public boolean callTarget(Object appleEvent) {
                    if (appleEvent != null) {
                        try {
                            Method getFilenameMethod = appleEvent.getClass().getDeclaredMethod("getFilename", (Class[])null);
                            String filename = (String) getFilenameMethod.invoke(appleEvent, (Object[])null);
                            this.targetMethod.invoke(this.targetObject, new Object[] { filename });
                        } catch (Exception ex) {

                        }
                    }
                    return true;
                }
            });
        }

        // setHandler creates a Proxy object from the passed MacOSHandler and adds it as an ApplicationListener
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public static void setHandler(HOsx adapter) {
            try {
                Class applicationClass = Class.forName("com.Apple.eawt.Application");
                if (macOSXApplication == null) {
                    macOSXApplication = applicationClass.getConstructor((Class[])null).newInstance((Object[])null);
                }
                Class applicationListenerClass = Class.forName("com.Apple.eawt.ApplicationListener");
                Method addListenerMethod = applicationClass.getDeclaredMethod("addApplicationListener", new Class[] { applicationListenerClass });
                // Create a proxy object around this handler that can be reflectively added as an Apple ApplicationListener
                Object MacOSHandlerProxy = Proxy.newProxyInstance(HOsx.class.getClassLoader(), new Class[] { applicationListenerClass }, adapter);
                addListenerMethod.invoke(macOSXApplication, new Object[] { MacOSHandlerProxy });
            } catch (ClassNotFoundException cnfe) {
                System.err.println("This version of Mac OS X does not support the Apple EAWT.  ApplicationEvent handling has been disabled (" + cnfe + ")");
            } catch (Exception ex) {  // Likely a NoSuchMethodException or an IllegalAccessException loading/invoking eawt.Application methods
                System.err.println("Mac OS X Adapter could not talk to EAWT:");
                ex.printStackTrace();
            }
        }

        // Each MacOSHandler has the name of the EAWT method it intends to listen for (handleAbout, for example),
        // the Object that will ultimately perform the task, and the Method to be called on that Object
        protected HOsx(String proxySignature, Object target, Method handler) {
            this.proxySignature = proxySignature;
            this.targetObject = target;
            this.targetMethod = handler;
        }

        // Override this method to perform any operations on the event 
        // that comes with the various callbacks
        // See setFileHandler above for an example
        public boolean callTarget(Object appleEvent) throws InvocationTargetException, IllegalAccessException {
            Object result = targetMethod.invoke(targetObject, (Object[])null);
            if (result == null) {
                return true;
            }
            return Boolean.valueOf(result.toString()).booleanValue();
        }

        // InvocationHandler implementation
        // This is the entry point for our proxy object; it is called every time an ApplicationListener method is invoked
        public Object invoke (Object proxy, Method method, Object[] args) throws Throwable {
            if (isCorrectMethod(method, args)) {
                boolean handled = callTarget(args[0]);
                setApplicationEventHandled(args[0], handled);
            }
            // All of the ApplicationListener methods are void; return null regardless of what happens
            return null;
        }

        // Compare the method that was called to the intended method when the MacOSHandler instance was created
        // (e.g. handleAbout, handleQuit, handleOpenFile, etc.)
        protected boolean isCorrectMethod(Method method, Object[] args) {
            return (targetMethod != null && proxySignature.equals(method.getName()) && args.length == 1);
        }

        // It is important to mark the ApplicationEvent as handled and cancel the default behavior
        // This method checks for a boolean result from the proxy method and sets the event accordingly
        protected void setApplicationEventHandled(Object event, boolean handled) {
            if (event != null) {
                try {
                    Method setHandledMethod = event.getClass().getDeclaredMethod("setHandled", new Class[] { boolean.class });
                    // If the target method returns a boolean, use that as a hint
                    setHandledMethod.invoke(event, new Object[] { Boolean.valueOf(handled) });
                } catch (Exception ex) {
                    System.err.println("MacOSHandler was unable to handle an ApplicationEvent: " + event);
                    ex.printStackTrace();
                }
            }
        }    
}

Irgendwelche Ideen, warum ich nicht exportieren/kompilieren kann? Ich hatte dieses Problem noch nie zuvor

18
Andy

Führen Sie einfach eine Bereinigung durch und/oder bauen Sie das Projekt neu auf.

Sie finden es unter dem Menü Project von Eclipse.

28
adarshr

Ich hatte auch einen anderen, degenerierten Fall für dieses Problem. Es stellte sich heraus, dass wir in unserem Projekt eine Klasse hatten, die über eine Datei verfügte (Eclipse behielt sie im Klassenpfad), aber keine tatsächliche Klasse in der Datei (die Datei hatte nur Importe und einen Klassenkommentar ... wahrscheinlich ist ein Zusammenführen fehlgeschlagen). . Durch das Löschen der Datei wurde das Problem behoben.

3
Dkarode

Es ist ziemlich hasserfüllt, dass Eclipse immer versteckte Dateien erzeugt .project und .classpath im Projektordner. Manchmal wissen Sie nicht, ob In diesen Dateien geht etwas schief.

Nach dem Upgrade Ihres Eclipse und wenn Sie die folgende Kompilierung gefunden haben Fehler. Ich empfehle Ihnen, .classpath in Ihrem Projektordner zu überprüfen.

Das Projekt wurde nicht erstellt, da der Erstellungspfad nicht abgeschlossen ist. Kann nicht Suchen Sie die Klassendatei für Java.lang.Object. Korrigieren Sie den Build-Pfad und versuchen Sie es dann Bau dieses Projekts

Höchstwahrscheinlich würden Sie eine solche Zeile sehen.

<classpathentry kind="con" path="org.Eclipse.jdt.launching.JRE_CONTAINER/    org.Eclipse.jdt.internal.debug.ui.launcher.StandardVMType/j2re1.4.2_03"/>

Die dumme Eclipse hat dies ohne Grund angehängt. Entfernen Sie es einfach damit es wieder funktioniert. ;)

/org.Eclipse.jdt.internal.debug.ui.launcher.StandardVMType/j2re1.4.2_xx

Quelle: http://hochit.com/2006/07/06/Eclipse-upgrading-problem-javalangobject-not-found/

Außerdem können Sie Ihren project settings in Eclipse überprüfen. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Eigenschaften. Gehen Sie zum Java-Erstellungspfad, und es sollten genauere Informationen zum Problem vorhanden sein. Höchstwahrscheinlich haben Sie die JDK auf eine Version gesetzt, die auf dem neuen System nicht vorhanden ist.

Wenn dies auch nicht hilft, wählen Sie Ihr Projekt aus und verwenden Sie dann den Menüeintrag Source->Clean Up.

2
Dennis Kriechel

Ich hatte den gleichen Fehler und nachdem ich mehrere Empfehlungen ausprobiert hatte, hatte sich nichts ergeben. Also habe ich einen neuen Arbeitsbereich erstellt und auf dieses Projekt Bezug genommen. Danach wurde das JAR erfolgreich erstellt und fehlerfrei exportiert.

0

In meinem Fall waren die Klassen leer und der Compiler jammerte:

Class files on classpath not found or not accessible for: 'ibDemo/src/com/ib/controller/LocationCode.Java'
Class files on classpath not found or not accessible for: 'ibDemo/src/com/ib/controller/PairPanel.Java'

Um dies zu lösen, füge ich eine Klassendeklaration hinzu:

public class LocationCode
{

}

und 

public class PairPanel
{

}
0
Pedro Lobito

Ich wurde hier verwiesen, weil ich den gleichen Fehler hatte ... Ich benutze Maven für Eclipse. Ich habe mit der rechten Maustaste auf Repo geklickt, Buildpfad-> Conifgure-Build-> Projektreferenzen ausgewählt und die Projektreferenzen für mein Repo überprüft. Das hat bei mir funktioniert. 

0
sl500059

Ich bin mit demselben Fehler hierher gekommen. In meinem Fall wurde nichts kompiliert (Gebäude?), Und Eclipse hat mir nicht mitgeteilt, dass es beim Build andere Probleme als diese kryptischen Nachrichten gab. Schließlich entpackte ich die JAR-Datei und sah, dass sie keine Klassen enthielt. Das lag daran, dass das Projekt, auf das ich in meinem Erstellungspfad verwiesen habe, nicht erstellt wurde. In meinem Fall würde das Projekt nicht in einer Million Jahre kompiliert werden, aber ich hatte Zugriff auf JAR-Dateien von F & E-Abteilung, die es auf ihre eigene Art und Weise kompilieren konnten. Also habe ich stattdessen auf diese JAR-Dateien verwiesen. Nun kompilieren meine Klassen und der Fehler ist verschwunden. Ich bin mir sicher, dass ich das zuerst getan hätte, aber "Hilfsbereit" schlug Eclipse vor, das unbebaute Projekt anzuführen, also ging ich mit dem schlechten Vorschlag einher!

0
EdwardF

Nicht sicher, ob dies die beste Lösung ist, überprüfen Sie jedoch den Java-Erstellungspfad. Ich hatte es auf einen falschen Standort verwiesen, aufgrund dessen ich mich nicht mit Klassenfehler konfrontiert sah. Nachdem der Java-Erstellungspfad behoben wurde, wurde das Problem behoben.

0
Vaibhav Mishra

Ich bekam auch den gleichen Fehler. In meinem Fall war das Problem, dass ich dasselbe Glas mehrmals durch "Benutzerbibliothek" und das nächste Mal durch "Build-Pfad" für dasselbe Projekt eingesetzt habe. Die wiederholten Gläser wurden einfach aus dem Klassenpfad gelöscht und der oben genannte Fehler wurde behoben.

0
RCS