2014年2月28日 星期五

Android java.lang.RuntimeException: Unable to instantiate activity ComponentInfo 解決方法

今天寫 Android 的時候,改了一下 package name,移動了一些 class 到新的 package
可想而知的,程式就 run 不起來了
compile 可以過,但出現 runtime 例外

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo

原因是更改了 activity 所在的 package 名稱
但 AndroidManifest.xml 內沒同步修改到

將標籤 manifest 的 package 屬性設定為 activity 所在的 package 即可

Java 取得正在執行的 function(method) 名稱

如提。一行以蔽之。

Thread.currentThread().getStackTrace()[2].toString()

參考 Getting the name of the current executing method

2014年2月14日 星期五

AndEngine Scene.detachChild(IEntity) exception : java.lang.IndexOutOfBoundsException 解決方法

事情是這樣的,用 AndEngine 開發遊戲的時候
想要移動一個 A 物件至 camera 外,並在移出後從 scene 刪掉

於是乎用了一個 MoveModifier 移動 A 物件的位置
並給了 Modifier 一個 IEntityModifierListener 並 override 了 onModifierFinished 這個方法
在這個方法中呼叫 Scene 的 detachChild() 來移除 A 物件

結果就出現例外了
FATAL EXCEPTION: UpdateThread
java.lang.IndexOutOfBoundsException: Invalid index 142, size is 142

google 了一下發現這是 thread 的 concurrency 問題
似乎是 Modifier 為另外的 thread 所操控
執行 detachChild() 時,須在 OnUpdate 的 thread 下執行

◎解決辦法
將 detachChild() 丟到以下位置即可

engine.runOnUpdateThread(new Runnable() {
@Override
public void run() {
scene.detachChild(entity);
}
});

Reference :
Exception while removing sprite from scene ( detachChild )

2014年2月12日 星期三

Eclipse Unhandled event loop exception No more handles 解決方法

『如果你有裝 Teamview 的話請直接拉到最下面看方法四』


小明有一天用 eclipse 寫 android 突然出現這樣的錯誤視窗
是一個例外,這個例外的詳細資訊長這樣

把這錯誤示窗關掉繼續 coding,沒幾下又彈出一樣的東西
幾次後發現好像點到 code 編輯器的地方就會出現
於是乎 google 了一下,找了一些解決方法

◎方法一
從中文的開始嘗試了這篇的方法
說是要刪掉 AppData\Local\Eclipse 目錄
不過我是用 Android ADT bundle 好像找不到這個目錄,不過還是列出來供大家參考

◎方法二
一樣是中文的
照著做發現我的 eclipse.ini 裡面已經有 -XX:MaxPermSize 了
另外加上 -XX:PermSize 也沒有用,一樣有例外跑出來

◎方法三
只好開始看英文的解決辦法了,找到了 stackoverflow 的這篇
按照一樓的說法是 Eclipse 預設的 Java 編輯器有 bug
改用 WindowBuilder 可以解決

於是乎從 Eclipse -> Help -> Install New Software 裡安裝 WindowBuilder
在 Work with 那欄填上 WindowBuilder 的網址即可下載安裝
Eclipse 4.2 的網址 http://download.eclipse.org/windowbuilder/WB/release/R201309271200/4.2/
Eclipse 4.3 的網址 http://download.eclipse.org/windowbuilder/WB/release/R201309271200/4.3/
安裝完之後到 Eclupse -> Window -> Preferences 內修改 Java Editor
選擇 *.java 然後在下方加入 WindowBuilder 並設為 Default 讓 WindowBuilder 爬到第一名

結果……問題依然存在

◎方法四
在 stackoverflow 中一個連結一個連結找,找到了 eclipse 的 bug 討論區
裡面什麼樣的可能解決辦法都有
有人說是雙顯示器的關係,有人說是ATI顯卡的關係……@#%^@#$
照著做把螢幕先切回只有一個,無效
更新顯卡驅動,無效

看到有人說把 Teamviewer 關掉,我就關掉,然後就好了  。:.゚ヽ(*´∀`)ノ゚.: 。:.゚ヽ(*´∀`)ノ゚.:。

本著實驗以及信任 Teamviewer 的精神,還是要來測試一下到底是哪裡出問題
直覺上第一個想到的就是會出現在視窗右上角的 "快速連線按鈕"
果然沒錯,把這個功能關掉就完全 OK 了
關掉的方法如下圖