Ява.ленг.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
однако это сломает его на устройствах с другим процессором, поэтому добавьте их всех.