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

rah*_*hul 145 android fatal-error

我试图运行示例代码在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
Run Code Online (Sandbox Code Playgroud)

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

Tan*_*dal 131

这是你的意图的问题.

请加入你ActivityAndroidManifest.xml.

当您想要开展新活动时,您应该在您的活动中注册AndroidManifest.xml.

  • 另一个选择是你的活动在清单中,但它被声明为`abstract`(我在重构期间犯了这个错误并且错误消息没有多大帮助). (5认同)
  • 我有一个不扩展活动的类,只包含一些常见的功能; 但我仍然得到这个例外; 为什么? (4认同)

SMU*_*hah 54

您可能正试图找到之前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);
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 哇,谢谢你.你是一个救生员.这很傻,但非常感谢.它已经困扰了我一个星期了. (2认同)

Mar*_*ues 52

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

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>
Run Code Online (Sandbox Code Playgroud)

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

<activity android:name=".activities.MainActivity"/>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@Maragues !! 这是同样的问题!你解决了我的问题。:) (2认同)

Kev*_*vin 45

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

  • 此外,活动必须公开(这是我的错误). (11认同)
  • @BenjaminFranklin抽象类意味着它不完整,它缺少部分.使用关键字abstract为类添加前缀意味着它不能直接实例化,而只能通过继承实现:以及实现抽象类缺少功能的其他类. (2认同)

Har*_*had 27

图片

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


Kyl*_*yle 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次并重新安装 - 仍然按预期工作.

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


Muz*_*Muz 13

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

希望它可以帮助某人.

  • 还在主 build.gradle 中添加 `classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION` (2认同)

Col*_*ris 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) {
....
}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

SQLiteDatabase db;

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


Jag*_*ngh 7

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

谢谢.


saj*_*159 6

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

如果您创建了一个新类,请不要在on onCreate(Bundle savedInstanceState)方法中设置它.

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


sat*_*ost 6

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

 package="com.example.app"
Run Code Online (Sandbox Code Playgroud)

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

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

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">
Run Code Online (Sandbox Code Playgroud)

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


Emr*_*mza 6

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


iSe*_*See 5

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

Button infoButton = (Button)findViewById(R.id.InfoButton);
Run Code Online (Sandbox Code Playgroud)

这行代码如上:

@Override
public void onCreate (Bundle savedInstanceState) {
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我也被剥夺了睡眠 (2认同)

Anu*_*nup 5

onCreate就我而言,我什至在为 Activity 调用之前就尝试初始化组件(UI) 。

确保您的 UI 组件onCreate在之后的方法中初始化/链接setContentView

NB:这是我学习Android编程时犯的第一个错误。


小智 5

对我来说,这与以上任何一个都不一样,

该活动被声明为抽象的,这就是给出错误的原因。一旦删除它就起作用了。

早些时候

     public abstract class SampleActivity extends AppcompatActivity{
     }
Run Code Online (Sandbox Code Playgroud)

拆除后

     public class SampleActivity extends AppcompatActivity{
     }
Run Code Online (Sandbox Code Playgroud)


Ami*_*ngh 5

确保 MainActivity 不是“抽象的”。

abstract class MainActivity : AppCompatActivity()
Run Code Online (Sandbox Code Playgroud)

只需删除摘要

class MainActivity : AppCompatActivity() {
Run Code Online (Sandbox Code Playgroud)