Java.lang.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.access$800(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); } } 

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

Привет, мои проблемы решены. Я должен добавить jna-4.2.2.jar в свои проекты. У меня есть ошибки о родных библиотеках в jna.jar. Поэтому в этом случае в Eclipse я должен перейти в « Настройки»> «Android»> «Сборка»> «Отменить». «Принудительная ошибка, когда внешние банки содержат собственные библиотеки». Тогда моя проблема решена.

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

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

Java.lang.ClassNotFoundException: com.sun.jna.Platform

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

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

Для этого вы щелкните правой кнопкой мыши на своем проекте в затмении, а затем перейдите в «Свойства» (должен быть внизу).

Есть несколько вариантов слева, выберите «Java Build Path». Здесь вы можете добавить «Добавить банки» или «Добавить внешние банки». Если вы выберете Add External Jar, вы можете установить его из любого места, если вы выберете Add Jars, который вы можете установить в проекте папки. Я бы добавил папку jar внутри папки проекта и поместил все зависимости jar в противном случае, если вы переместите банки в другую папку, вам нужно сделать это снова.

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

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

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

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

Когда у вас есть исключение, посмотрите на последнее сообщение, вызванное сообщением. Например, вот оно: вызвано: java.lang.NoClassDefFoundError: com.sun.jna.Platform. В Java много классов ошибок. Это ошибка от Object-> Throwable-> Error-> LinkageError . Ошибка => Проблема во время выполнения, No class Def Found Error – типичная проблема для загрузчика классов. Все, что вам может понадобиться для объяснения ошибки, – это java docs.


Кстати, из ваших комментариев в комментариях, вот решение добавить внешнюю библиотеку.

КАК ДОБАВИТЬ БИБЛИОТЕКУ ДЛЯ ПРОЕКТА В ECLIPSE: Загрузите jar, который будет указан здесь другими пользователями (jna.jar) и добавьте его в папку lib, а затем вы должны добавить его в путь сборки (тогда загрузчик классов сможет найти его, и он будет Решить вашу проблему). Если вы используете Eclipse, вы можете импортировать их напрямую через Eclipse в свою папку lib (щелкните правой кнопкой мыши на папке проекта, выберите путь сборки, вкладку библиотек и добавьте jar) или просто скопируйте jar прямо в папку lib, затем щелкните правой кнопкой мыши и выберите «Путь сборки» -> Добавить To Buildpath.

Intereting Posts
Как мы наследуем классы тестов через модули библиотеки Android? Компонент чтения PDF для Android Получение поддержки Android NDK r9d для поддержки C ++ 11 Идентификатор регистрации android c2dm не работает Почему и когда нужно отменить регистрацию контента в андроиде OnCreateContextMenu вызывается с нулевым значением для ContextMenuInfo Невозможно десериализовать экземпляр объекта из токена START_ARRAY в Spring Webservice Как создать службу на Android Что делает Persistent XMPp-подключение с XMPP-сервером? Обнаружение физического нажатия клавиши меню на Android Несмотря на использование слабой ссылки Отправка Android-сообщения прикосновением к основной активности при отображении диалога ViewHolder.getAdapterPosition () всегда возвращает -1 Корневой эмулятор ICS; Толкание su терпит неудачу с «Недостаточно памяти», Проблема при использовании 2 фрагментов карты в одном приложении Интеграция эспрессо с Proguard и Gradle