Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 显示神秘行为的函数_Java 8_Kotlin - Fatal编程技术网

Java 8 显示神秘行为的函数

Java 8 显示神秘行为的函数,java-8,kotlin,Java 8,Kotlin,我正在用kotlin帮助开发一个android应用程序,但问题是基于纯kotlin基础知识的。下面是显示一些异常行为的函数: fun CatchThat(funct: () -> Unit){ try { funct() }catch (ex: Error){ ex.printStackTrace() } } 当我在代码中使用它时 CatchThat { // Proprietary Code goes in here } 调试器无法正常工作(有时) 专有代码根本不执

我正在用
kotlin
帮助开发一个android应用程序,但问题是基于纯
kotlin
基础知识的。下面是显示一些异常行为的函数:

fun CatchThat(funct: () -> Unit){
try {
    funct()
}catch (ex: Error){
    ex.printStackTrace()
}
}
当我在代码中使用它时

CatchThat {
// Proprietary Code goes in here
}
  • 调试器无法正常工作(有时)
  • 专有代码根本不执行(有时)
为什么会遇到这种行为,或者我的一些概念有误(可能是
lambdas
)。欢迎提供任何帮助或建议。(我是kotlin的泰罗人)

编辑我在专有代码中所做的事情。
我试图调用一个
线程池
,该线程池反过来调用一个web活动。这是最好的,也是我能解释的。很抱歉。

try/catch只能在当前线程上工作。在您的代码段中,如果某个异常ocourr出现在另一个线程中,try/catch将无法工作

例如:

try {
    println("Hola mundo 1!")
    println(5 / 0)
} catch (ex: Throwable) {
    println("Oups! $ex")// will be printed
}

try {
    Thread {
        println("Hola mundo 2!")
        println(5 / 0)
    }.start()
} catch (ex: Throwable) {
    println("Oups! $ex")// won't be printed
}

println("Hola mundo 3!")//The exception thrown in the external thread don't kill the current thread

有关调试问题,请参阅

try/catch将仅在当前线程上工作。在您的代码段中,如果某个异常ocourr出现在另一个线程中,try/catch将无法工作

例如:

try {
    println("Hola mundo 1!")
    println(5 / 0)
} catch (ex: Throwable) {
    println("Oups! $ex")// will be printed
}

try {
    Thread {
        println("Hola mundo 2!")
        println(5 / 0)
    }.start()
} catch (ex: Throwable) {
    println("Oups! $ex")// won't be printed
}

println("Hola mundo 3!")//The exception thrown in the external thread don't kill the current thread

有关调试问题,请查看

,我不确定它是否解决了问题,但值得一试,因为您的所有努力都是经过仔细考虑的(而且您的语法中没有错误)。 我猜如果调试器停在错误的线路上(或者有时不工作),通常意味着 代码缓存中有东西被破坏了

如果您正在使用Idea,请尝试使Idea缓存无效并重新启动。

在这样做之前

我还建议使用最新版本更新Kotlin。


我不确定它是否解决了问题,但它值得一试,因为您的所有努力都进行得很顺利(而且因为您的语法中没有错误)。 我猜如果调试器停在错误的线路上(或者有时不工作),通常意味着 代码缓存中有东西被破坏了

如果您正在使用Idea,请尝试使Idea缓存无效并重新启动。

在这样做之前

我还建议使用最新版本更新Kotlin。



对我来说,这个代码示例很有用。。。您使用的是哪个版本的kotlin?您提供的专有代码是什么?您没有得到任何输出?您也应该用Throwable替换错误以捕获异常
Kotlin 1.1.2
,很抱歉,我无法提供专有代码,因为代码是专有的。在这里,有时需要注意的是,no@crgarridos。相同的代码在一个时间点工作,没有错误,下次将变为空白!!!试着解释一下你在代码中做什么。片段是正确的。可能会启动另一个线程?对我来说,这个代码示例很有用。。。您使用的是哪个版本的kotlin?您提供的专有代码是什么?您没有得到任何输出?您也应该用Throwable替换错误以捕获异常
Kotlin 1.1.2
,很抱歉,我无法提供专有代码,因为代码是专有的。在这里,有时需要注意的是,no@crgarridos。相同的代码在一个时间点工作,没有错误,下次将变为空白!!!试着解释一下你在代码中做什么。片段是正确的。可能会启动另一个线程?非常感谢@crgarridos给出的答案,并为您提供了宝贵的时间,但为什么有时它会提供正确的输出,调试器工作正常,有时代码也会执行?只是猜测一下,它可能会为您的代码变化,因为您有一个线程池,执行是异步的。然后你可以在一个或另一个线程中“随机”出现异常!但再次感谢您给予宝贵的时间和+1!!!!我肯定会提到什么时候我会得到正确的修复,不客气,抱歉没有更干净,但没有代码很难看到问题。我认为你有一些东西可以输出,但并不是所有的代码都执行得很好。非常感谢@crgarridos给出的答案,并为此付出了宝贵的时间。但是为什么有时候它会给出正确的输出,调试器工作得很好,有时候代码也会执行?只是猜测一下,它可能会因你的代码而变化,因为你有一个线程池,执行是异步的。然后你可以在一个或另一个线程中“随机”出现异常!但再次感谢您给予宝贵的时间和+1!!!!我肯定会提到什么时候我会得到正确的修复,不客气,抱歉没有更干净,但没有代码很难看到问题。我想你有一些东西的输出,但不是所有的代码都执行得很好,谢谢先生!!第一行粗体字不起作用,但最后一行,即更新到最新版本,即
1.1.3
修复了问题。非常感谢您,先生!!第一行粗体字不起作用,但最后一行,即更新到最新版本,即
1.1.3
修复了此问题。非常感谢