【问题标题】:Android - unable to resolve java.lang.StringIndexOutOfBoundsExceptionAndroid - 无法解决 java.lang.StringIndexOutOfBoundsException
【发布时间】:2015-10-03 14:38:51
【问题描述】:

我无法找到解决方案,甚至无法找到导致此错误的原因。此错误在 Eclipse(用于测试)中的相同代码中不存在,但在 Android Studio 应用中使用时崩溃并出现错误。

来自 Logcat:

 java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:4020)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.ExceptionInInitializerError
            at com.bmc.thirdparty.org.apache.commons.lang.builder.ToStringStyle$MultiLineToStringStyle.<init>(ToStringStyle.java:2135)
            at com.bmc.thirdparty.org.apache.commons.lang.builder.ToStringStyle.<clinit>(ToStringStyle.java:79)
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:309)
            at java.lang.Class.forName(Class.java:273)
            at com.bmc.arsys.api.Config.if(Unknown Source)
            at com.bmc.arsys.api.Config.applyDefaults(Unknown Source)
            at com.bmc.arsys.apitransport.ApiConfig.<init>(Unknown Source)
            at com.bmc.arsys.api.Config.<init>(Unknown Source)
            at com.bmc.arsys.api.Config.<clinit>(Unknown Source)
            at com.bmc.arsys.api.session.a.a(Unknown Source)
            at com.bmc.arsys.api.session.a.<init>(Unknown Source)
            at com.bmc.arsys.api.ARServerUser.<clinit>(Unknown Source)
            at flashmanagment.app.ARS.initializeServer(ARS.java:41)
            at flashmanagment.app.MainActivity.loadData(MainActivity.java:51)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.StringIndexOutOfBoundsException: length=1; regionStart=0; regionLength=3
            at java.lang.String.startEndAndLength(String.java:504)
            at java.lang.String.substring(String.java:1333)
            at com.bmc.thirdparty.org.apache.commons.lang.SystemUtils.getJavaVersionAsFloat(SystemUtils.java:1122)
            at com.bmc.thirdparty.org.apache.commons.lang.SystemUtils.<clinit>(SystemUtils.java:818)
            at com.bmc.thirdparty.org.apache.commons.lang.builder.ToStringStyle$MultiLineToStringStyle.<init>(ToStringStyle.java:2135)
            at com.bmc.thirdparty.org.apache.commons.lang.builder.ToStringStyle.<clinit>(ToStringStyle.java:79)
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:309)
            at java.lang.Class.forName(Class.java:273)
            at com.bmc.arsys.api.Config.if(Unknown Source)
            at com.bmc.arsys.api.Config.applyDefaults(Unknown Source)
            at com.bmc.arsys.apitransport.ApiConfig.<init>(Unknown Source)
            at com.bmc.arsys.api.Config.<init>(Unknown Source)
            at com.bmc.arsys.api.Config.<clinit>(Unknown Source)
            at com.bmc.arsys.api.session.a.a(Unknown Source)
            at com.bmc.arsys.api.session.a.<init>(Unknown Source)
            at com.bmc.arsys.api.ARServerUser.<clinit>(Unknown Source)
            at flashmanagment.app.ARS.initializeServer(ARS.java:41)
            at flashmanagment.app.MainActivity.loadData(MainActivity.java:51)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

这是我从 bmc 导入的库的错误吗?

主要活动的相关代码,通过按钮点击调用:

   public void loadData(View v){
        ARS.getInstance().initializeServer("username","password");   
    }   

来自 Java 类:

public class ARS {

public static ARS instance = new ARS();

public static ARServerUser server;
public static ARS getInstance(){
    return instance;
}

public void initializeServer(String user, String password){
    server = new ARServerUser(user,password,null,"serverStringHere",portNumberHere);

}

同样,在 Eclipse 中使用相同的代码没有错误。任何帮助将不胜感激。

编辑 SystemUtils.java:1122

    1118    private static float More ...getJavaVersionAsFloat() {
1119        if (JAVA_VERSION_TRIMMED == null) {
1120            return 0f;
1121        }
1122        String str = JAVA_VERSION_TRIMMED.substring(0, 3);
1123        if (JAVA_VERSION_TRIMMED.length() >= 5) {
1124            str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
1125        }
1126        try {
1127            return Float.parseFloat(str);
1128        } catch (Exception ex) {
1129            return 0;
1130        }
1131    }

【问题讨论】:

  • 什么是 SystemUtils.java 第 1122 行?
  • @immibis 在帖子中添加了此内容

标签: java android eclipse error-handling


【解决方案1】:

您应该提供有关您的程序的更多信息,因为此代码不是完整的图片。您正在尝试调用按钮单击,但您的应用程序未处于正确状态。

【讨论】:

    【解决方案2】:

    这看起来是库对 Java 版本格式做出一些假设的问题,这在两个环境 - Eclipse 和 Android Studio 之间必须不同。

    变量/常量 JAVA_VERSION_TRIMMED 已设置为长度为 1 的值,但库假设它更长。

    要进一步调试,您应该在 SystemUtils 第 818 行的静态初始化程序块中设置断点,或者检查该行发生的情况。

    一旦显示,您的选择会有所不同。您可能无法影响库。虽然 Apache Commons Lang 是开源的并且可能会做出贡献,但您可能会发现通过 BMC 库路由这些更改更加困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2019-06-09
      • 2021-11-19
      相关资源
      最近更新 更多