it-swarm.com.ru

Eclipse - сбой при создании JAR "Файлы классов на пути к классам не найдены или недоступны для ..."

У меня есть проект в Eclipse, на котором есть красный крест, и я не буду экспортировать его в работающий JAR. Я не помню, смотрел ли я на него с тех пор, как переустановил Windows на своем ноутбуке, но я знаю, что я не изменил ни один код. Нет ошибок ни в одном из классов, однако ошибка, которую я получаю, указывает на следующий класс, который имеет дело с пунктами меню в Mac OSx:

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();
                }
            }
        }    
}

Есть идеи, почему я не могу экспортировать/скомпилировать? У меня никогда не было этой проблемы раньше

18
Andy

Просто сделайте чистку и/или перестройте проект.

Вы можете найти его в меню Project Eclipse.

28
adarshr

У меня также был другой, вырожденный случай этой проблемы. Оказалось, что в нашем проекте был класс, в котором был файл (поэтому Eclipse сохранил его в пути к классам), но в файле не было задано никакого фактического класса (файл имел только импорт и комментарий класса ... возможно, слияние произошло неправильно) , В любом случае, удаление файла решило проблему.

3
Dkarode

Очень неприятно, что Eclipse всегда генерирует скрытые файлы .project и .classpath в папке проекта. Иногда вы не знаете, если что-то идет не так в этих файлах.

После обновления вашего Eclipse и если вы нашли следующую компиляцию ошибка, я бы посоветовал вам проверить .classpath в папке вашего проекта.

Проект не был построен, поскольку его путь сборки не завершен. Не могу найдите файл класса для Java.lang.Object. Исправьте путь сборки, затем попробуйте строит этот проект

Скорее всего, вы увидите такую ​​строку.

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

Глупое Затмение добавило это без причины. Просто удалите его чтобы это снова заработало. ;)

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

Источник: http://hochit.com/2006/07/06/Eclipse-upgrading-problem-javalangobject-not-found/

Кроме того, вы можете проверить свой project settings в Eclipse. Щелкните правой кнопкой мыши по вашему проекту и выберите свойства. Перейдите в Java Build Path и там должна быть более конкретная информация о проблеме. Скорее всего, вы установили для JDK версию, которой нет в новой системе.

Если это тоже не поможет, выберите ваш проект, а затем используйте пункт меню Source->Clean Up.

2
Dennis Kriechel

У меня была та же ошибка, и после того, как я попробовал несколько рекомендаций, ничего не получилось. Поэтому я создал новое рабочее пространство и обратился к этому проекту. После этого он был успешно собран и экспортирован JAR без ошибок.

0
Mohan Kumar Kannan

В моем случае классы были пусты , и компилятор скулил:

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'

Чтобы решить эту проблему, я бы добавил объявление класса:

public class LocationCode
{

}

а также 

public class PairPanel
{

}
0
Pedro Lobito

Я получил ссылку здесь, потому что у меня была та же ошибка . Я использую Maven на Eclipse. Я щелкнул правой кнопкой мыши на репо, выбрал путь сборки-> Conifgure build-> Project References и проверил ссылки на проекты для моего репо. Это сработало для меня. 

0
sl500059

Я пришел сюда по той же ошибке. В моем случае ничего не компилировалось (строилось?), И Eclipse не сказал мне, что была какая-то проблема со сборкой, кроме этих загадочных сообщений. В конце концов я распаковал файл jar и увидел, что в нем нет классов. Это потому, что проект, на который я ссылался в моем пути сборки, не был построен. В моем случае проект не скомпилировался бы через миллион лет, но у меня был доступ к jar-файлам из отдела исследований и разработок, которые могли и действительно скомпилировали его по-своему. Поэтому я ссылался на эти файлы JAR вместо. Теперь мои классы компилируются, и ошибка исчезла. Я уверен, что сделал бы это в первую очередь, но «Полезный» Eclipse предложил мне сослаться на не построенный проект, поэтому я согласился с плохим предложением!

0
EdwardF

Не уверен, что это может быть лучшим решением, но проверьте путь сборки Java. У меня было указание на неправильное местоположение, из-за которого я столкнулся с классом не найдена ошибка. После исправления пути сборки Java проблема была решена.

0
Vaibhav Mishra

Я также получал ту же ошибку. В моем случае проблема заключалась в том, что я поместил один и тот же jar несколько раз один раз через «пользовательскую библиотеку» и в следующий раз через «путь сборки» в одном и том же проекте. Просто удалил повторные баночки из classpath и получил указанную выше ошибку.

0
RCS