繁体   English   中英

java.lang.ExceptionInInitializerError 不会 go 离开

[英]java.lang.ExceptionInInitializerError won't go away

我正在努力解决这个异常。 显然,当正在初始化 static 变量或 static 块时,可能会抛出它。 我得到的是

java.lang.ExceptionInInitializerError

在我初始化变量的默认值的那一行

var prefOctaveIndex = 9

以及在我的 Main Activity 的onCreate中,我从共享首选项中读取它是否需要被覆盖

val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
prefOctaveIndex = sharedPreferences.getString("octave", "9")?.toInt()!!

The exception is Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference in line 12 of

fun calculateMonzo(numInput: Long, denInput: Long): MutableList<Long> {
    var num = numInput
    var den = denInput

    val monzo = mutableListOf<Long>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    for (i in 0..14) while (num % primes[i] == 0L) { // THIS LINE //
        monzo[i]++
        num /= primes[i]
    }
    for (i in 0..14) while (den % primes[i] == 0L) {
        monzo[i]--
        den /= primes[i]
    }
    monzo.add(num)
    monzo.add(den)
    return monzo // length = 17
}

而这个class的第10行,调用了上面的function。

class Ratio private constructor(
        val num: Long,
        val den: Long,
        val monzo: List<Long>
) {
    constructor(monzo: List<Long>) : this(calculateRatio(monzo).first, calculateRatio(monzo).second, monzo)

    constructor(num: Long, den: Long) : this(num, den, calculateMonzo(num, den)) // THIS LINE //

    val sizeInCents: Double = calculateCents(num, den)
    val centDeviation: Pair<String, Double> = calculateCentDeviation(num, den, monzo)
    val notation: Triple<String, String, String> = calculateNotation(monzo)
    val frequency: Double = calculateFrequency(num, den)
    val hd: Double = calculateHD(num, den)
    val bendSibelius = calculateSibeliusBend(centDeviation.second, sizeInCents)
    val bendFinale = calculateFinaleXBend(centDeviation.second, sizeInCents)
}

完整的堆栈,以防它更有帮助,但我的应用程序已经非常大,所以不知道从哪里开始共享更多代码片段。

java.lang.ExceptionInInitializerError
        at org.plainsound.hejicalc.ValsVarsKt.setPrefOctaveIndex(ValsVars.kt:37)
        at org.plainsound.hejicalc.MainActivity.onCreate(MainActivity.kt:48)
        at android.app.Activity.performCreate(Activity.java:8000)
        at android.app.Activity.performCreate(Activity.java:7984)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
        at org.plainsound.hejicalc.FunctionsKt.calculateMonzo(Functions.kt:12)
        at org.plainsound.hejicalc.Ratio.<init>(Ratio.kt:10)
        at org.plainsound.hejicalc.ValsVarsKt.<clinit>(ValsVars.kt:94)
        at org.plainsound.hejicalc.ValsVarsKt.setPrefOctaveIndex(ValsVars.kt:37) 
        at org.plainsound.hejicalc.MainActivity.onCreate(MainActivity.kt:48) 
        at android.app.Activity.performCreate(Activity.java:8000) 
        at android.app.Activity.performCreate(Activity.java:7984) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

我不太明白,因为该应用程序运行了好几个星期。

我相信primes变量在使用之前没有被初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM