следующий код Scala, кажется, бросить исключение Java, но продолжает выполнение других строк кода:Java исключение не распространяется на Scala
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")
}
}
Кто-нибудь знает, как поймать исключение, вызванное асинхронным кодом java в scala?
Заранее за вашу помощь.
Вы должны проверить это http://stackoverflow.com/a/40814641/539864 – xiumeteo
Возможный дубликат [Как поймать исключение при создании экземпляра MongoClient] (http://stackoverflow.com/questions/40813060/how- to-catch-exception-when-creation-mongoclient-instance) – xiumeteo
Определенно дубликат, поскольку проблема связана с интерфейсом scala-java. Должен ли я удалять вопрос тогда? – Antonin