Ява.ленг.ExceptionInInitializerError в Android

Я пытаюсь создать приложение для Android, которое может проверить лицо, но когда я пытаюсь запустить приложение на своем эмуляторе (используя Eclipse), у меня есть этот результат в моем logcat:

       06-16 14:51:24.326: E/AndroidRuntime(4305): FATAL EXCEPTION: main
06-16 14:51:24.326: E/AndroidRuntime(4305): Process: com.neurotec.samples.faceverification, PID: 4305
06-16 14:51:24.326: E/AndroidRuntime(4305): java.lang.ExceptionInInitializerError
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.view.NGui.<clinit>(NGui.java:56)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.view.NViewBase.<clinit>(NViewBase.java:30)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at java.lang.reflect.Constructor.constructNative(Native Method)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.view.LayoutInflater.createView(LayoutInflater.java:594)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:341)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.Activity.setContentView(Activity.java:1975)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.samples.faceverification.FaceVerificationApplication.onCreate(FaceVerificationApplication.java:46)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.Activity.performCreate(Activity.java:5370)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2422)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.ActivityThread.access0(ActivityThread.java:151)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.os.Handler.dispatchMessage(Handler.java:110)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.os.Looper.loop(Looper.java:193)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at android.app.ActivityThread.main(ActivityThread.java:5330)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at java.lang.reflect.Method.invokeNative(Native Method)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at java.lang.reflect.Method.invoke(Method.java:515)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at dalvik.system.NativeStart.main(Native Method)
06-16 14:51:24.326: E/AndroidRuntime(4305): Caused by: java.lang.ExceptionInInitializerError
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.media.NMedia.<clinit>(NMedia.java:49)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.view.NGui.<clinit>(NGui.java:47)
06-16 14:51:24.326: E/AndroidRuntime(4305):     ... 26 more
06-16 14:51:24.326: E/AndroidRuntime(4305): Caused by: java.lang.ExceptionInInitializerError
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.lang.NCore.<clinit>(NCore.java:140)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.lang.NTypes.<clinit>(NTypes.java:171)
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.media.NMedia.<clinit>(NMedia.java:46)
06-16 14:51:24.326: E/AndroidRuntime(4305):     ... 27 more
06-16 14:51:24.326: E/AndroidRuntime(4305): Caused by: java.lang.NoClassDefFoundError: com.sun.jna.Platform
06-16 14:51:24.326: E/AndroidRuntime(4305):     at com.neurotec.lang.NCore.<clinit>(NCore.java:123)
06-16 14:51:24.326: E/AndroidRuntime(4305):     ... 29 more

код для FaceVerificationApplication.java выглядит следующим образом:

public class FaceVerificationApplication extends BaseActivity implements
        EnrollmentDialogListener, UserSelectionListener {

    // ===========================================================
    // Private fields
    // ===========================================================

    private static final String EXTRA_REQUEST_CODE = "request_code";
    private static final int VERIFICATION_REQUEST_CODE = 1;
    private static final int TIMEOUT = 60000;
    private boolean mAppClosing;
    private NFaceVerificationView mFaceView;

    // ===========================================================
    // Protected methods
    // ===========================================================

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nlvdemo);
        // on application start you must set NCore context
        NCore.setContext(this);

        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    showProgress(R.string.msg_initialising);

                    // get NFV for the first time
                    final NFaceVerification nfv = NFV.getInstance();

                    // load settings
                    SettingsFragment.loadSettings();

                    // button implementations
                    Button mEnrollButton = (Button) findViewById(R.id.button_enroll);
                    mEnrollButton
                            .setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    EnrollmentDialogFragment enrollDialog = new EnrollmentDialogFragment();
                                    enrollDialog.show(getFragmentManager(),
                                            "enrollment");
                                }
                            });

                    Button mCancelButton = (Button) findViewById(R.id.button_cancel);
                    mCancelButton
                            .setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    showProgress(R.string.msg_cancelling);
                                    nfv.cancel();
                                    hideProgress();
                                }
                            });

                    Button mVerifyButton = (Button) findViewById(R.id.button_verify);
                    mVerifyButton
                            .setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    Bundle bundle = new Bundle();
                                    bundle.putInt(EXTRA_REQUEST_CODE,
                                            VERIFICATION_REQUEST_CODE);
                                    UserListFragment userList = (UserListFragment) UserListFragment
                                            .newInstance(nfv.getUsers(), true,
                                                    bundle);
                                    userList.show(getFragmentManager(),
                                            "verification");
                                }
                            });

                    // set frontal camera
                    String[] names = nfv.getAvailableCameraNames();
                    for (String n : names) {
                        if (n.contains("Front")) {
                            nfv.setCamera(n);
                            break;
                        }
                    }

                    mFaceView = (NFaceVerificationView) findViewById(R.id.nFaceView);
                    nfv.addCapturePreviewListener(new NFaceVerificationCapturePreviewListener() {

                        @Override
                        public void capturePreview(
                                NFaceVerificationCapturePreviewEvent arg0) {
                            mFaceView.setEvent(arg0);
                        }
                    });

                    hideProgress();
                } catch (Exception ex) {
                    hideProgress();
                    showError(ex);
                }
            }

        }).start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.nlvdemo, menu);
        return true;
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        mAppClosing = true;
    }

    @Override
    public void onEnrollmentIDProvided(final String id) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    // cancel in there are any other operations in progress
                    NFV.getInstance().cancel();
                    NFaceVerificationStatus status = NFV.getInstance().enroll(
                            id, TIMEOUT, null);
                    showInfo(String.format(
                            getString(R.string.msg_operation_status),
                            status.toString()));
                } catch (Throwable e) {
                    showError(e);
                }
            }
        }).start();
    };

    @Override
    public void onUserSelected(final NFaceVerificationUser user, Bundle bundle) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    // cancel in there are any other operations in progress
                    NFV.getInstance().cancel();
                    NFaceVerificationStatus status = NFV.getInstance().verify(
                            user.getId(), TIMEOUT);
                    showInfo(String.format(
                            getString(R.string.msg_operation_status),
                            status.toString()));
                } catch (Throwable e) {
                    showError(e);
                }
            }
        }).start();
    };

    @Override
    protected void onStop() {
        if (mAppClosing) {
            NFV.getInstance().cancel();
            NFV.dispose();
        }
        super.onStop();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_clear_db) {
            new Thread(new Runnable() {

                @Override
                public void run() {
                    // cancel if there are any other operations in progress
                    NFV.getInstance().cancel();
                    NFV.getInstance().getUsers().clear();
                }
            }).start();
            return true;
        } else if (id == R.id.action_settings) {
            Intent intent = new Intent(this, SettingsActivity.class);
            startActivity(intent);

            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

Как я могу решить это исключение ? Любой совет очень помогает .

5 ответов


привет мои проблемы . Я должен добавить jna-4.2.2.jar в мои проекты . У меня есть ошибки о родных библиотеках в jna.сосуд. Поэтому в этом случае, в Eclipse, я должен пойти в "настройки" - > Андроид - > построить > снимите "ошибка силой, когда внешние JAR-файлы содержат собственные библиотеки". тогда моя проблема решена .


вот ответы, так что вы знаете, как решить его сейчас. Но это для других. Java имеет отличную обработку сообщений об исключениях, где вы можете найти почти все, что вам нужно, чтобы исправить это. Это только мое мнение и Совет: каждый раз смотреть на вызвано: часть.

когда у вас есть исключение, посмотрите, наконец, вызванное сообщением. Например, вот это: вызвано: java.ленг.Ошибке типа noclassdeffounderror: com будет.солнце.Юна.Платформа. Java имеет много классов ошибок. Это ошибка от объекта - >Throwable ->Ошибка->LinkageError. Ошибка => проблема во время выполнения, ошибка класса Def не найдена типичная проблема для classloader. Все, что вам может понадобиться для объяснения ошибки, находится в java docs.


кстати из ваших quetions в комментариях, вот решение для добавления внешней библиотеки.

КАК ДОБАВИТЬ БИБЛИОТЕКУ В ПРОЕКТ В ECLIPSE: Скачать банку, которая расшифровывается другими здесь (jna.jar) и добавьте его в lib и тогда вам нужно добавить его в build path (тогда classloader сможет его найти, и это решит вашу проблему). Если вы используете Eclipse, вы можете импортировать их непосредственно через Eclipse в папку lib (щелкните правой кнопкой мыши на папке проекта, выберите buildpath, вкладку "библиотеки" и добавьте jar) или просто скопируйте jar непосредственно в папку lib, затем щелкните правой кнопкой мыши и создайте путь -> добавить в Buildpath.


Если я читаю это правильно, он не может найти библиотеку для Java Native Access Platform

в Eclipse в свойствах проекта проверьте библиотеки для платформы JNA

java.ленг.ClassNotFoundException: com.солнце.Юна.Платформа

прошло несколько лет с тех пор, как я использовал eclipse.


вам может потребоваться добавить больше зависимостей, которые могут быть здесьhttps://github.com/java-native-access/jna/tree/master/lib Если у меня есть правильная библиотека.

чтобы сделать это, вы щелкните правой кнопкой мыши на своем проекте в eclipse, а затем перейдите к свойствам(должен быть нижний вариант).

есть несколько вариантов слева, выберите "путь сборки Java". Здесь вы можете добавить "добавить банки"или" добавить внешние банки". Если вы выбираете Add External Jar, вы можете установить из любого места, если вы выберете добавить банки, вы можете установить их в проекте папки. Я бы добавил папку jar внутри папки проекта и поместил все зависимости jar там в противном случае, если вы перемещаете банки в другую папку, Вам нужно сделать это снова.

добавить все банки из ссылки и под-ссылки, которые есть. Посмотрите, устраняет ли это проблему. Eclipse сообщит вам, отсутствуют ли зависимости для ваших классов, но он не сообщит вам, отсутствуют ли зависимости, пока вы не Запустите свой код.


Как уже указывали другие, у вас есть отсутствующая зависимость от проекта под названием Java Native Access (JNA). Если вы внимательно посмотрите на свой StackTrace, вы увидите в конце это исключение:java.lang.NoClassDefFoundError: com.sun.jna.Platform. Короткий поиск Google завершился в репозитории выше.

Я бы попытался скачать все обзоры банки которые имеют префикс Android. Вам также может понадобиться просто android-arm.jar однако это сломает его на устройствах с другим процессором, поэтому добавьте их всех.