簡體   English   中英

Java異常不會傳播到Scala

[英]Java exception does not propagate to Scala

以下scala代碼似乎引發了java異常,但繼續執行其他代碼行:

object FirstMain {
  def main(args: Array[String]): Unit = {
    var mongoClient : MongoClient = MongoClients.create() // this is a java method
    println("hello")
    Thread.sleep(500)
    println("hello2")
}

控制台輸出:

Feb 17, 2017 7:57:49 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Feb 17, 2017 7:57:50 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.AsynchronousSocketChannelStream$OpenCompletionHandler.failed(AsynchronousSocketChannelStream.java:253)

[...] // stacktrace

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

[...] // stacktrace

hello 
hello2

我嘗試使用try / catch塊來處理異常,但是我得到的輸出與第一段代碼相同。 以下代碼從不打印“做某事!”

object FirstMain {
  def main(args: Array[String]): Unit = {
  try{
    var mongoClient : MongoClient = MongoClients.create()
  }
  catch {
    case e : MongoSocketOpenException => println("do Something")
  }
  println("hello")
  Thread.sleep(500)
  println("hello2")
  }
}

有誰知道如何捕獲Scala中異步Java代碼引發的異常?

在此先感謝您的幫助。

這與異步或scala無關。 您正在調用的方法是同步的。 它不返回Future或其他異步類型。 您創建的客戶端是異步的,但方法不是。 之所以無法捕獲該異常,是因為Mongo可能已經捕獲了該異常,並且沒有讓它冒出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM