[J2ME QA]真机报告MontyThread -n的错误之解释
[友情提示]<?xml:namespace prefix = o />
首先你需要告訴大家,測試的真機是哪一款手機,比如Nokia6600,據我所觀察,好像這種錯誤在Nokia6600上發生的比較多;
其次,你可以通過代碼調試得知發生此錯誤的時候,你的代碼在做哪方面的執行,比如HttpConnection聯網?比如用Graphics的DrawRegion?還是在關閉整個應用程序的時候?
?
我們總結一下:
[When]
Nokia的幾款機器,用了Monty/Monte Virtual Machine。
MontyThread的錯誤,一般是VM報告的錯誤,我們猜測當時VM正準備關閉一個或多個正處于活動狀態的Thread。
所以有時候你看到應用程序MIDlet被關閉后,隔了一小會兒,突然報告一個MontyThread的錯誤,這可能是因為你的某一個線程處于阻塞狀態,而正在被試圖強行關閉。
另外一種情況是,使用JSR135(Mobile Media API[MMAPI])并用錯誤的編碼器在錯誤的音頻流上,也會導致MontyThread異常錯誤。
[HowTo]
你知道那句名言的,J2ME的那句,“write once, debug everywhere”。
So,盡量在真機上用Alert來反復進行二分法測試,尋找到異常是從哪里拋出來的。
盡量確定你自己創建的線程能否自己優雅地結束,而不需要VM強制關閉。
?
[參考]
實際上,您可以在《WhatJavaDevelopersNeedToKnow,Symbian OS v7 - Functional description》找到一個相關的錯誤解釋:
Program MontyThread -8
Reason code KERN-EXEC
Reason number 3
?In this case the Panic originates from “MontyThread”3 which is the VM thread with identifier 8. The Panic has been detected by the Kernel Executive, which has terminated the associated process. The reason for the Panic is indicated by the number 3. In this example to quote the SDK documentation “This panic is raised when an unhandled exception occurs. Exceptions have many causes, but the most common are access violations caused, for example, by dereferencing a NULL pointer. Among other possible causes are: general protection faults, executing an invalid instruction, alignment checks, etc.”
但是至于更常見的MotyThread -9和-6,則沒有解釋。
我們嘗試在《Error Resolution on Symbian OS》中找到相應的錯誤,比如
|   KErrBadHandle  |   -8  |   "Bad object"  | 
也許和上面所說的“access violations caused”似乎有點像。當然這僅僅是猜測,SymbianOS的錯誤號可能和MontyThread后面跟的錯誤號意思不一樣。
不管怎么樣,我們試圖把二者聯系到一起:
|   KErrOverflow  |   -9  |   "Overflow"  | 
,如果你看到MontyThread -9的錯誤,會不會是因為你的程序占用了過多的內存?
|   KErrArgument  |   -6  |   "Bad request"  | 
,如果你看到MontyThread -6的錯誤,會不會是因為你的程序用了platformRequest來調用真機上不支持的功能了呢?
總結
以上是生活随笔為你收集整理的[J2ME QA]真机报告MontyThread -n的错误之解释的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: [转载]迅速成长的两个重要途径
 - 下一篇: SpikeSource公司的CEO-Ki