运行Android项目,报错java.lang.IllegalAccessException: access to constructor not allowe

本文解决了一个关于Android自定义Application启动失败的问题,错误提示为构造方法权限不足。问题出现在自定义Application类的一个私有的无参构造函数上,通过将其改为公有解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

修改了AndroidManifest.xml,设置<application>的属性android:name="自定义的Aplication",结果运行Android项目,报下面错误:
 

    08-18 02:27:41.660: D/dalvikvm(649): newInstance failed: Lcom/foxhis/untils/ActivityApplication;.<init>() not accessible to Landroid/app/Instrumentation;  
    08-18 02:27:41.660: D/AndroidRuntime(649): Shutting down VM  
    08-18 02:27:41.660: W/dalvikvm(649): threadid=1: thread exiting with uncaught exception (group=0x4001d800)  
    08-18 02:27:41.680: E/AndroidRuntime(649): FATAL EXCEPTION: main  
    08-18 02:27:41.680: E/AndroidRuntime(649): java.lang.RuntimeException: Unable to instantiate application com.foxhis.untils.ActivityApplication: java.lang.IllegalAccessException: access to constructor not allowed  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:649) 
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4232)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.ActivityThread.access$3000(ActivityThread.java:125)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.os.Handler.dispatchMessage(Handler.java:99)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.os.Looper.loop(Looper.java:123)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.ActivityThread.main(ActivityThread.java:4627)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at java.lang.reflect.Method.invokeNative(Native Method)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at java.lang.reflect.Method.invoke(Method.java:521)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
    08-18 02:27:41.680: E/AndroidRuntime(649):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at dalvik.system.NativeStart.main(Native Method)  
    08-18 02:27:41.680: E/AndroidRuntime(649): Caused by: java.lang.IllegalAccessException: access to constructor not allowed  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at java.lang.Class.newInstanceImpl(Native Method)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at java.lang.Class.newInstance(Class.java:1429)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.Instrumentation.newApplication(Instrumentation.java:957)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.Instrumentation.newApplication(Instrumentation.java:942)  
    08-18 02:27:41.680: E/AndroidRuntime(649):  at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:644) 
    08-18 02:27:41.680: E/AndroidRuntime(649):  ... 11 more  

错误提示是,构造方法的权限不对,招拒。

 

检查了整个Application,才发现,原来有一个无参数的构造方法,被设计成private。

修改其为public即可。

 

其他:

      对于自定义的Application,如果里面定义的参数是,只仅仅该类中使用,则可以定义为private,私有属性。 如果是其他地方也使用,必须定义为public。 类中方法,全部定义为public。


转自:http://www.cxybl.com/html/android/20140818/41145.html

### Java运行时异常InvocationTargetException及其解决方案 `java.lang.reflect.InvocationTargetException` 是一种常见的反射调用异常,通常表示通过反射机制调用的方法抛出了异常。这种异常的根本原因可能是方法内部逻辑出现了问题,或者外部条件不满足(如权限不足)。以下是针对该问题的具体分析和解决办法。 #### 1. InvocationTargetException 的根本原因 当 `InvocationTargetException` 被抛出时,通常是由于被调用的目标方法本身发生了异常。这些异常可能包括但不限于 `RuntimeException` 或者 `IOException`。因此,在排查此类问题时,需要重点检查目标方法的实现细节以及其依赖的上下文环境[^3]。 #### 2. 文件权限命令错误的原因及解决方式 如果问题是由于尝试获取文件权限而引发的,则需要确认以下几点: - **Android 权限声明** 如果是在 Android 平台上操作 SD 卡中的文件,必须在 `AndroidManifest.xml` 中正确配置读写权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> ``` 此外,对于 Android 6.0 及以上版本,还需要动态请求权限[^1]。 - **文件路径合法性验证** 需要确保访问的文件路径有效且存在。可以通过如下代码片段来验证文件是否存在并可读/写: ```java File file = new File("/path/to/file"); if (!file.exists()) { throw new FileNotFoundException("File does not exist."); } ``` - **IO 操作的安全性** 对于涉及 IO 操作的部分,建议使用 try-with-resources 结构以确保资源能够及时释放,从而减少潜在的 `IOException` 发生概率: ```java try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (FileNotFoundException e) { System.err.println("File not found: " + e.getMessage()); } catch (IOException e) { System.err.println("Error reading the file: " + e.getMessage()); } ``` #### 3. 关于 JAVA_HOME 环境变量的问题 如果问题发生在 Spark 环境下,并提示未找到 `JAVA_HOME`,则可以按照以下步骤解决问题: - 创建 `/usr/java` 目录,并设置软链接指向实际 JDK 安装位置: ```bash mkdir -p /usr/java ln -s /opt/jdk/jdk1.7.0_79 /usr/java/default ``` - 确认集群节点上的每台机器都已执行上述操作,并重启相关服务以使更改生效[^2]。 #### 4. 综合调试策略 为了更全面地定位问题根源,可以在日志中打印更多上下文信息以便进一步分析。例如: ```java try { Method method = SomeClass.class.getMethod("someMethod", String.class); Object result = method.invoke(null, "testArgument"); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { Throwable cause = e.getCause(); if (cause instanceof RuntimeException) { System.err.println("Runtime exception occurred: " + cause.getMessage()); } else if (cause instanceof IOException) { System.err.println("I/O error occurred: " + cause.getMessage()); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值