java.lang.RuntimeException:无法实例化活动ComponentInfo

问题描述 投票:141回答:38

我试图运行示例代码在Android 1.5模拟器中启动应用程序时,我遇到了这些错误....任何人都有一些提示..?

来自LogCat的错误:

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

编辑此错误发生在大多数初学者身上,问题是您必须在Manifest文件中添加所有活动。

android fatal-error
38个回答
129
投票

这是你的意图的问题。

请在你的Activity中添加你的AndroidManifest.xml

如果您想进行新活动,请在AndroidManifest.xml中注册。


6
投票

在我的情况下,我没有设置setContentView(R.layout.main);

如果你创建一个新类,不要忘记在onCreate(Bundle savedInstanceState)方法中设置它。

我曾多次做过这个愚蠢的错误。


6
投票

只需清理您的工作项目或重启eclipse。然后运行您的项目。它会工作。


6
投票

对我来说,AndroidManifest.xml中的包字符串不正确(从教程中复制)。确保此文件中的包字符串与主要活动的位置相同,例如

 package="com.example.app"

一种简单的方法是在“Manifest”选项卡中打开AndroidManifest.xml文件,并在Package旁边的文本框中键入它,或使用Browse按钮。

此外,我的活动的包字符串是错误的,例如

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

几周后,当我重命名我的包名时,我(愚蠢地)得到了同样的错误。如果这样做,请确保您也更新AndroidManifest.xml文件。


5
投票

好吧,我在iPhone上相当有经验,但对android很新。我有这样的问题:

Button infoButton = (Button)findViewById(R.id.InfoButton);

这行代码如上:

@Override
public void onCreate (Bundle savedInstanceState) {
}

可能是我被剥夺了睡眠:P


3
投票

我最近在重新安装Eclipse时遇到了这个问题。结果我的编译器合规性级别设置为Java 1.7,项目需要1.6。

在Eclipse中:项目 - >属性 - > Java编译器 - > JDK合规性


2
投票

遇到此问题,并通过设置活动的“启动模式”属性来修复它。


2
投票

此问题的另一个原因可能是缺少库。

转到属性 - > Android并检查是否正确添加了库


2
投票

我有同样的问题,但我在Manifest文件中声明了我的活动,名称正确。

我的问题是我没有在“libs”文件夹中导入第三方库,我需要在我的proyect中引用它们(右键单击,属性,Java构建路径,库,添加Jar ...)。


2
投票

如果您的活动类位于默认包中,则会发生这种情况。我通过将活动类移动到新包来修复它。并更改manifest.xml

之前

activity android:name=".MainActivity" 

activity android:name="new_package.MainActivity"

1
投票

使用NDK时,这种情况经常发生在我身上。我发现每次做ndk-build之后,我都必须在Eclipse中做一个“干净”。希望它能帮到任何人:)


51
投票

在我的情况下,我忘了添加谷歌地图库

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

另外,检查您是否在活动路径之前没有错过前面的点

<activity android:name=".activities.MainActivity"/>

1
投票

当您使用ActionBarActivity但指定了非AppCompat样式时,也会发生此错误。

要解决此问题,只需将您的应用程序样式父级设置为Theme.AppCompat,如下所示:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

1
投票

右键单击项目>属性> android>并尝试使用不同版本的android之前我正在使用android 4.4然后我改为android 4.3并且它工作!


1
投票

我遇到了同样的问题(无法实例化Activity):

第一个原因:

我正在访问

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

之前

mCamera = Camera.open();

所以正确的做法是先打开相机,然后再访问参数。

第二个原因:在清单文件中声明您的活动

<activity android:name=".activities.MainActivity"/>

第三个原因:在清单文件中声明相机权限。

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

希望这可以帮助


1
投票

在我的情况下,我试图嵌入Facebook SDK,我有错误的应用程序ID;因此错误突然出现。在清单文件中,您应该拥有正确的元数据:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

1
投票

如果您安装了Android Studio 2.3.3和Android Studio 3.0.0,则在两个程序之间进行切换以进行开发将导致此错误。这是因为存在一个程序中支持的类不被另一个支持的情况,反之亦然。保持使用哪个版本的Android Studio开发项目的一致性非常重要。


1
投票

正如djjeckthis的评论中所建议的那样,我错过了为我的课程添加public修饰符。

它应该是

public class MyActivity extends AppCompatActivity {

它可能会帮到像我这样的人。


1
投票

我已经尝试了以上所有解决方案,但没有任何对我有用在我刚刚添加extend活动而不是AppCompatActivity并且工作正常。

用过的

public class MainActivity extends Activity  

代替

public class MainActivity extends AppCompatActivity 

我不知道真正的问题是什么。


0
投票

当我尝试在2.2上运行Activity时,发生了这种情况,使用了Honeycomb的导入,这在旧版本的Android中不可用,也没有包含在v4支持包中。


0
投票

你的新活动像AndroidManifest.xml一样添加".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />

0
投票

您应该确保在AndroidManifest.xml文件中正确定义了应用程序中的所有活动。

此外,如果他们以路径开头,请确保此路径存在。

例如。这不起作用:

<activity android:name=".com.example.android.networkusage.NetworkActivity" android:label="@string/app_name" >

如果您的应用程序名称是com.example.networkusage(请注意缺少.android。)

或者更好的是,在清单中定义活动时不要包含路径。只提出他们的名字(前面有一个圆点)。

<activity android:name=".NetworkActivity" android:label="@string/app_name" >

48
投票

您可能正试图在onCreate()之前找到不正确的视图。

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  ...
}

0
投票

你可能在你的领域有一些错误

public class Search_costumer extends Activity {

// you may have some errors like this 
int x =3/0;
// I have error in initializing this variable too 
 MySimpleOnGestureListener mySimpleOnGestureListener =new MySimpleOnGestureListener();

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}
}

所以我的建议是不要直接在你的字段中执行onCreate方法中的所有初始化

这样解决

public class Search_costumer extends Activity {

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

// you may have some errors like this 
int x =3/0;
// I have error in initializing this variable too 
 MySimpleOnGestureListener mySimpleOnGestureListener =new MySimpleOnGestureListener();
}
}

44
投票

还有另一种获取java.lang.RuntimeException的方法:无法实例化活动ComponentInfo异常,这是您尝试启动的活动是抽象的。我犯了这个愚蠢的错误,很容易被忽视。


27
投票

这也是因为这个问题。我取消选中需要导出到apk的罐子,同样的事情发生了。请勾选你的应用程序需要运行的jar。


15
投票

我也遇到了这个问题,但方式略有不同。这是我的场景:

应用细节:

  • 使用ActionBarSherlock作为库
  • 在ActionBarSherlock库中使用android-support-v4-r7-googlemaps.jar,这样我就可以在我的主项目中使用“地图片段”
  • 将jar添加到我的主项目的构建路径中
  • 包括<uses-library android:name="com.google.android.maps" />在图书馆项目和我的主要项目的清单中(这可能在图书馆中没有必要吗?)
  • 主项目中的清单具有适当的活动定义和所有适当的属性
  • 我没有抽象活动或我在Stack Overflow上看到的与此问题相关的任何其他问题。

但是,我仍然遇到了原帖中描述的错误,无法让它消失。但问题是,在某方面略有不同:

  • 它只会影响我的设备的全新应用程序安装。任何时候第一次安装应用程序,我会得到错误之前的几个“警告”:无法解析FragmentActivity的超类
  • 这些警告追溯到ActionBarSherlock库
  • 该应用程序将强制关闭和崩溃。
  • 如果我立即重建并重新部署该应用程序,它运行正常。
  • 它崩溃的唯一一次是全新安装。如果我卸载了从Eclipse再次构建和部署的应用程序,它就会崩溃。第二次构建/部署,它会正常工作。

我是如何修理它的:

  • 在ActionBarSherlock库项目中,我将android-support-v4-r7-googlemaps.jar添加到构建路径
  • 仅此步骤无法解决问题
  • 将jar添加到构建路径后,我在Java Build Path> Order and Export选项卡上更改了顺序 - 我将JAR设置为列表中的第一项(它是/ src和/ gen项之后的最后一项) )。
  • 然后我重新构建并将应用程序重新部署到我的设备上 - 它在全新安装时按预期工作。为了确定,我再次卸载了2-3次并重新安装 - 仍然按预期工作。

这可能是一个彻头彻尾的新手错误,但我花了很长时间来挖掘帖子和我的代码才弄明白,所以希望它可以对其他人有所帮助。可能无法解决所有情况,但在这种特殊情况下,最终成为我问题的解决方案。


11
投票

这个错误也可能是一个愚蠢错误的终极迹象(就像我 - 我的意思是,咳嗽,就像我的一个朋友曾向我展示过他们的代码一样)他们试图在一个方法之外执行代码,比如试图这样做:

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

而不是这个:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

11
投票

这可能与实际问题无关,但在我的实例中,我试图实施Kotlin并遗漏了apply plugin: 'kotlin-android'。发生错误是因为它无法将MainActivity识别为.kt文件。

希望它可以帮助某人。


7
投票

我通过删除项目中的BinGen文件夹(项目将在构建时自动返回)然后从 - >菜单 - >项目 - >清理清除项目来解决此问题。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.