2017-08-30 63 views
0

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

fun CatchThat(funct:() -> Unit){ 
try { 
    funct() 
}catch (ex: Error){ 
    ex.printStackTrace() 
} 
} 

当我使用它在我的代码

CatchThat { 
// Proprietary Code goes in here 
} 
  • 调试器不能正常工作(有时)
  • 专有代码根本不执行(有时)

为什么遇到这种行为,或者我得到一些概念错误(可能是lambdas)。任何帮助或建议,欢迎尽情(我在kotlin一个初学者)

编辑我在专有代码正在做的事情。 我试图调用一个Thread Pool,然后调用一个Web活动。这是最好的,我只能解释一下。我为此感到抱歉。

+0

对我来说,这段代码示例的作品...您使用的是哪个版本的kotlin,以及您提供的专有代码是什么? – Piwo

+0

你没有得到任何输出?你应该用Throwable替换Error来捕获异常 – crgarridos

+0

Kotlin 1.1.2'抱歉,我无法提供专有代码,因为代码是**专有** – Mandy8055

回答

1

我不是当然,如果它将问题整理出来,但它是值得一试的,因为所有的努力都是一成不变的(也因为你的语法没有错误)。 我想如果调试器停在错误的线路上(或者有时不工作),它通常意味着 在代码缓存中被破坏。

尝试使无效的想法缓存,并重新启动,如果您使用的想法当然。

而在此之前这样做

我也建议使用最新版本的更新科特林。

+0

谢谢先生!第一条粗线不起作用,但最后一行即更新到最新版本,即'1.1.3'修复了这个问题。非常感谢你 – Mandy8055

3

try/catch只能在当前线程上运行。在你的代码段,如果在另一个线程一些例外ocourrs,在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 

对于调试问题看看到Android Studio threaded debugging

+0

感谢很多@crgarridos的答案,并给你宝贵的时间,但**为什么有时它会给出正确的输出,调试器工作正常,有时代码执行呢?** – Mandy8055

+0

只是猜测,它可以改变你的代码,因为你有一个线程池,执行是异步的。然后你可以在一个或另一个线程“随机”出现异常 – crgarridos

+0

也许!但再次感谢您给我宝贵的时间和+1!!!!我一定会提及什么时候我会得到正确的修复 – Mandy8055