首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

Eclipse J2ME 開發常見錯誤:JAD 版本衝突 (Error 39) 徹底解決方案

     編輯:J2ME

錯誤現象

** Error installing suite (39): The JAD matches a version of a suite already installed.
Execution completed.

在 WTK 模擬器或 EclipseME 中運行/除錯 MIDlet 時頻繁出現,導致無法重新安裝應用。

根本原因

WTK 模擬器內部維護一個應用資料庫 (appdb),記錄已安裝套件的 MIDlet-Name、MIDlet-Version、MIDlet-Vendor 三元組。當專案屬性未變更但嘗試重新安裝時,WTK 認為同版本已存在,拒絕安裝。常見觸發場景:

  • 程式異常中止(強制停止、斷點未釋放、ANR),安裝狀態未正確清理
  • 切換模擬器皮膚(DefaultColorPhone ↔ DefaultGrayPhone 等)但資料庫未同步
  • 手動刪除 deploy/ 目錄下的 JAD/JAR,但 appdb 仍保留記錄

標準解決步驟(針對 WTK 2.x)

1. 定位 appdb 目錄

Windows 預設路徑:

C:\Documents and Settings\<用戶名>\j2mewtk\2.5.2\appdb\

或 EclipseME 工作區:

/.metadata/.plugins/org.eclipse.me/emulators/<模擬器名>/appdb/

2. 清理殘留檔案

appdb 目錄下包含:

  • 裝置子目錄:DefaultColorPhone、DefaultGrayPhone、MediaControlSkin、QwertyDevice 等,各自內含套件資料檔(如 #MIDlet%0020Suite_#MyProject_suite.*)
  • suites.utf:索引檔,記錄所有已安裝套件的 URL、版本、廠商資訊

操作:

  1. 關閉 Eclipse、WTK 模擬器
  2. 進入對應 appdb 目錄
  3. 刪除所有裝置子目錄下與當前專案相關的檔案(檔名含專案名/MIDlet 名)
  4. 刪除 suites.utf(將重新生成)
  5. 重啟 Eclipse,再次 Run As → Emulated J2ME Midlet

進階:批次腳本自動化清理 (Windows .bat)


@echo off
set WTK_HOME=C:\WTK2.5.2
set APPDB=%WTK_HOME%\appdb
if not exist "%APPDB%" goto :eof

for /d %%d in ("%APPDB%\*") do (
    echo Cleaning %%d ...
    del /q "%%d\*MyProject*" 2>nul
    del /q "%%d\*MIDlet Suite*" 2>nul
)
del /q "%APPDB%\suites.utf" 2>nul
echo Done.
pause

替換 MyProject、MIDlet Suite 為專案關鍵字,雙擊執行即可。

EclipseME 專用配置避坑

  1. 專案屬性 → J2ME → 描述符:每次建置前自動遞增 MIDlet-Version(如 1.0.0.{build}),強制 WTK 視為新版本
  2. Run Configuration → J2ME → 模擬器:勾選 「運行前刪除已安裝套件」(若支援)
  3. 切換模擬器皮膚:Window → Preferences → J2ME → Device Management,選中目標裝置點擊 Set as Default

預防措施

習慣效果
除錯結束正確點擊模擬器「掛機鍵」或選單 Exit觸發 MIDlet.destroyApp(),WTK 正常清理安裝狀態
避免在斷點處強制 Terminate防止 JVM 異常退出,留下髒資料
定期清理 appdb(專案切換時)防止舊專案殘留干擾新專案
使用 Ant + Antenna 自動化建置部署腳本中加入清理步驟,消除人為疏漏

結語

Error 39 本質上是狀態不一致:WTK 以為應用已安裝,實際運行環境卻無對應進程。徹底清理 appdb 是治本之道;配合版本號自動遞增、正確退出流程、自動化腳本,可將此錯誤頻率降至接近零。這也提醒我們:嵌入式開發中,模擬器狀態管理同樣是工程一環,不可忽視。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved