[英]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.