03-11 08:50:46.911 8208-8233/? E/AndroidRuntime: FATAL EXCEPTION: MX Notifier
Process: com.example.gec1ply.situationalautonomy, PID: 8208
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.app.Dialog.<init>(Dialog.java:119)
at android.app.AlertDialog.<init>(AlertDialog.java:200)
at android.app.AlertDialog$Builder.create(AlertDialog.java:1086)
at com.bosch.SituationalAutonomy.MainActivity.onCanMessageTimedOut(MainActivity.java:444)
at com.bosch.Platform.CAN.IO.OBDLink.OBDLinkMXNotifier.run(OBDLinkMXNotifier.java:39)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
这个问题的目标是理解错误,因为我不知道从哪里开始寻找。特别是因为第一个回调来自 Thread.run()
我能够成功地在模拟器上运行此应用程序,而不会引发任何异常,这使我相信该程序可能在与蓝牙连接时出现问题,但运行时期间的错误发生时间并不让我相信情况确实如此。
如果您需要任何代码示例,请评论并告诉我。谢谢:)
最佳答案
您正在尝试从非主线程的线程显示 AlertDialog
。这样做会导致此错误。当您收到 onCanMessageTimedOut
时,您应该向主线程发送一条消息,以便显示您的 AlertDialog
。如果您有对 Activity
的引用,则可以使用 runOnUiThread(Runnable)
例如
关于java - 在 Android 应用程序上运行线程时出现致命异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942766/