2010年10月18日月曜日

Excelのバグ?

Excel本体を2つ立ち上げて、それぞれでファイル操作をしたところ、後に立ち上げた方のシートでは表計算が正常に動作しませんでした。

具体的には、後で立ち上げたExcel側であるファイルを開き、その中で加算を行います。

(例)
A1セルに「1」、B1セルに「2」が入っている。
C1セルに
 =A1+B1
又は
 =SUM(A1, B1)
と入力すると、C1セルの数値が「0」と表示される。
正しい動作であれば「3」と表示されるはず。

既存ファイルの修正でも、新規ファイル作成でも同様の現象が発生しました。
なお、後で立ち上げたExcel本体を終了し、最初に立ち上げたExcel上で同様の操作を行ってみたところ、全く同じ式を入れたのにも関わらず、C1セルには「3」が表示され正常な動作が行われました。

あるExcelシートを片面のディスプレイで見ながら、もう1面のディスプレイでExcelファイルを編集するような場合には注意が必要です。

2010年9月21日火曜日

[Ruby]プロキシ経由だとgem installでエラー

Rubyに手を出してみることにしました。
正確にはRubyが必要な開発環境を導入してみることに。

まずはRubyインストール。
最初、色んなところから本体やらgemやら、Windows用Unixコマンドやらかきあつめてみたんですが・・・
よく見ると一発でインストールできちゃう素敵パッケージがありました。
RubyForgeというところでWindows用exe探したらあります。

動いているかどうかの確認はコマンドプロンプトで

> ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32]

こんな感じに。

さて、ここからgemインストールに挑戦してみたところエラー発生。
調べるとプロキシ経由だとエラーになるらしい。
コマンドプロンプトから

set http_proxy=http://proxy.hogehoge.jp:8080

と自分のところのプロキシとポート番号を設定して、再度gemると・・・

またエラー。
なんぞそれ。

ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)

と出た後ろに 503エラー?
そのURLをremoveするといいよ、なんていう情報もありましたが、gemコマンドに-yオプションつけてみたらうまく行きました。

2010年9月8日水曜日

VB6.0 文字表示に関する覚書(大層な・・・)

急遽、VB6.0でソフトを作ることになりました。
VC6.0は触ったことはあっても、VBはあんまり・・・

今回はお客様に「見た目」も重視されるようでしたので、画面デザインにも気を配ったのですが、VB6.0の文字表示の指定がなかなか思うように出来ず苦労しました。
別に書くほどの内容でもありませんが、検索した時に自分でひっかかるように(笑)

■Label
・横位置は指定可能(左寄せ、中央、右)
・縦位置は指定不可(必ず上寄せ)

■Button
・横位置は指定不可
・縦位置も指定不可(必ず中央寄せ)
・Enable = False にして押せないボタンをLabel代わりに・・・
 と思ったら、Falseの時は文字が灰色になってしまう罠。
 黒にしたいところも灰になると困る・・・

■Shape
・文字表示できないのでLabelと重ねて使う

■Image
・画像サイズに自動的に合わせてくれる


結局、Imageの性質を利用して、
(1)LabelやButtonを使って画面イメージを作成
(2)画面キャプチャで画像化
(3)画像を各パーツに切り分け、「ボタン風で文字を上寄せ」、「Shape+Label風で文字は中央寄せ」などになるよう多少手を入れて、JPEGまたはGIF形式で保存
(4)Imageを使ってひたすら並べる
としました。
静的な表示内容ならこれが楽でした。

問題は動的な表示の場合ですね。
その場合はプログラム内部で各プロパティをいじるのでしょうか。

2010年7月21日水曜日

[VBA]ワークシート上に置いたDTPickerコントロールの表示崩れ対策

理由あって、会社のPC上でExcel VBAでマクロを組むことになりました。

日付入力で「Microsoft Date and Time Picker Controll 6.0」(DTPicker)を使って、簡単にちょいちょいと作ろうとしたところ(※1)、起動時に奇怪な現象が発生。

(1)該当の.xlsファイルを起動する。
(2)DTPickerの中に赤い「×」が一瞬表示され、設定したサイズとは大きく異なる矩形に変形。
(3)デザインモードにすると設定したサイズで表示しなおされるが、デザインモードを終了すると矩形に戻る。
(4)一応、設定した日付は表示されている。
(5)スクロールしたりして、再描画が走ると設定したサイズで表示される。


何これ?
Google先生に聞いてみるも、あまり発生している人はいないのかこれという解決策は見当たらず。

(5)でシートの再描画が行われると正常に表示されることから、Bookオープン時に強制再描画を行うことで無理やり解決しました。
一瞬、「×」が見えるのがいただけませんが・・・。


※1:会社のPCはVisual StudioのライセンスがあるのでActiveX利用で問題ないかな、ということでAPI呼び出しは見送り。

2010年7月8日木曜日

Jarファイル実行時にClassNotFoundException

eclipseで実行可能なJar形式でJarファイルを作成。
ダブルクリックで実行したら

ClassNotFoundException

・・・。

java -classpath sample.jar com.sample.test.Sample
java -classpath [jarファイル名] [メインクラス名]

でやってもダメでした。
外部ライブラリを抽出してみても、パッケージにしてみてもダメ。
最終的にはJarファイルの隣のフォルダにライブラリをまとめて入れておいて、

java -classpath [jarファイル名] [メインクラス名]

で動きました。
ライブラリのクラスパスがおかしかったってことかしら・・・。
これだとダブルクリックではClassNotFoundになってしまうので、バッチファイルで上のjava実行コマンドを発行して実行してもらうことにしました。

ついでにJarファイルの実行パスをプログラムで取りたかったのですが、結構面倒そうなので、バッチファイルでJarファイルのあるフォルダをカレントディレクトリにして、

System.getProperty("user.dir");

で取ることにしました。
バッチ叩いてもらえないと何も動きません(ぉぃ)

SQLServer2005でバックアップファイルから復元する方法

sqlcmdコマンドを使って

sqlcmd -U [ユーザ名] -P [パスワード] -S [マシン名]\[インスタンス名]

でログインします。
その後に、

RESTORE DATABASE [データベース名] TO DISK = 'バックアップファイルのフルパス'
WITH RECOVERY, REPLACE
GO

で復元できるはず!

・・・できなかったので Management Studio の

新規クエリ > 「master」データベース

にして、上の「RESTORE〜」を書いて実行!
これで復元できました。

参考にさせていただいたサイト
http://infotech.fmfamily.net/modules/blog/details.php?bid=70&date=201003

2010年6月28日月曜日

[Android]SurfaceViewと終了処理

前の記事でSurfaceViewの描画処理が軽いと書きましたが、実際にはViewよりもメモリもCPUパワーも食うけどフレームレートが高くなるよ、が正しいところでしょうか。

携帯アプリだと描画処理にパワーとメモリを食って、キーイベントの割り込みが遅れるなんてこともあったので(かなり前の端末ですが)、描画用スレッドのループにはそれなりのsleepを入れた方が良さそうです。

さて、View#OnDraw(Canvas)で実装していた描画処理をSurfaceViewに変更しました。


【引っかかった点】

・コンストラクタで描画スレッド作ってstart()させちゃダメ
 ⇒surfaceCreated(SurfaceHolder)でやるのが正解。
 (そうやってたつもりでしたが、書く場所間違えてました・・・うっかり?)

・Xperiaの□ボタン押しても、描画スレッドのログが止まらない〜
 ⇒マルチスレッドですものね。
  ゾンビ恐ろしや。
  SurfaceViewをセットしたActivityのOnPause()をオーバーライドして、描画スレッドのループを抜けてスレッド終了させるようにしました。
  こんな感じのメソッドをSurfaceView継承クラスに追加して、OnPause()から呼んでいます。
  このメソッドの後ろにActivity#finish()を記述しています。


public void endLoop() {
synchronized (MainLoop) {
// ループを抜ける
loopflg = false;
}
try{
// スレッドの終了を待つ
MainLoop.join();
} catch( InterruptedException ex ){
Thread.currentThread().interrupt();
}
}

  MainLoop:描画スレッド
  loopflg:trueだとループ、falseでループ脱出
  です。
  他の方の処理を参考にさせて頂きました。

[Android]SurfaceViewとアノテーション

携帯アプリの移植のため、iPhone風にタッチパネルに指を滑らせる(フリックする)と画面が滑って切り替わる演出を作成しようとしました。

「throw Life - ActivityのOpenとCloseをアニメーションさせる」
http://www.adamrocker.com/blog/289/activity_open_close_animation.html

ここを参考にView + Themeによるアニメーションでも出来たのですが、設定がめんどくさい・・・(というかよく理解できていません・・・)

そこで調べてみると、ゲームのような画面描画が頻繁に行われるアプリにはSurfaceViewがいいとありました。
描画処理がViewより軽い模様。
これで携帯アプリと同じようにCanvasに画像をずらして描画して、タッチイベントに合わせてアニメーションしてるように動かせば実現できそうな気がします。

SurfaceViewにRunnableをインプリメントするか、別のThreadクラスにするか。
うーん。
携帯アプリの描画処理がCanvasにRunnableインプリして実装してあるので、とりあえずはRunnableでいきます。

早速、ネットをうろうろして他の方のコードを参考に書いてみました。
すると、親クラスからオーバーライドした surfaceCreated(SurfaceView surface) でいきなりのエラー。
見ると「@Override」をつけるとエラー、はずすとエラーじゃなくなります。

???

これも調べると同じ現象になった方がいらっしゃって、無事解決。
Javaコンパイルのターゲットバージョンを

Java1.5 ⇒ 1.6

と変更したら出なくなりました。
アノテーションというJava1.6で正式実装された機能なのですね。
携帯アプリでJava1.5までしか使ってなかったので知りませんでした。(言い訳)

2010年6月25日金曜日

[Android]文字列描画(訂正)

指定したY座標を文字列の左上に合わせる書き方は


canvas.drawText("hijkLMN", 100, 240 + fm.ascent, mPaint);


ではなくて、


canvas.drawText("hijkLMN", 100, 240 - fm.ascent, mPaint);


みたいです。
でも、微妙にずれる・・・おかしい。

[Android]文字列描画

Viewへの文字列の描画は下のような書き方で出来ました。

private class SampleView extends View {

Private Paint mPaint;

public SampleView(Context context) {
super(context);
mPaint = new Paint();
}

@Override
protected void onDraw(Canvas canvas) {

FontMetrics fm = null;
// 背景は白
canvas.drawColor(Color.WHITE);
// アンチエイリアス有り
mPaint.setAntiAlias(true);
// 描画色は黒
mPaint.setColor(Color.BLACK);

// フォントサイズの指定
mPaint.setTextSize(64);
fm = mPaint.getFontMetrics();
// 文字列リソースから取得する場合
canvas.drawText(getResources().getString(R.string.test), 100, 80, mPaint);
// 直接記述する場合
canvas.drawText("Abcdefg", 100, 160, mPaint);
// 座標位置(Y軸)はフォントのベースラインの値になるので
// 実際の描画位置は少し上になる。
// 座標位値(Y軸)をフォントの上限(Ascent)に合わせたい時は
// 下のように書く。
canvas.drawText("hijkLMN", 100, 240 + fm.ascent, mPaint);
}

FontMetricsのメンバ変数 ascent はフォントのベースラインから上限までの値(負の値)が入っているので、Y座標 + FontMetrics.ascentがフォントの上の部分の座標値になります。
文字列の幅はどうやって取ればいいのだろうと思っていたら、mPaint.getTextWidths(String str, float[] float)なるメソッドが。
これだ!と思ったら戻り値のintに入ったのは文字数・・・。
どうやら2番目の引数の中に各文字の幅が1文字ずつ入るメソッドのようなので、

String str = "Abcdefg";
float[] fl = new float[length];
int width = 0;

mPaint.getTextWidths(str, fl);
for(int i=0; i<length-1; i++) {
width += fl[i];
}

としました。
かっこ悪い気がするけど、他にどうやったら取れるかしら。
mPaintは上のコードのPaintクラスの変数です。

[Android]画面サイズの取得

http://start-android-sdk.blogspot.com/2010/05/android-how-to-get-screen-size-on.html
より。

これで取得できる画面サイズはタイトルバー&ステータスバーを含んだもの。

[Activity継承クラスの場合]
WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE);
Display disp = windowmanager.getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();

[View継承クラスの場合]
Display disp = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).
getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();

[Android]実行構成でNullPointerException 3

実行構成から構成の設定を行おうとするとNullPointerExceptionが発生する現象について。
おそらく、ではありますが解決方法がわかりました。

現象が発生するプロジェクトと、発生しないプロジェクトがありましたので両者を比較してみました。
すると、大きな違いが・・・

前者はビルドターゲットが「X10」、後者はビルドターゲットが「Android1.6」になっていました。
もしやと思い、前者のビルドターゲットを「Android1.6」にしたところ・・・


エラーが発生しなくなりました。


前に「プロジェクト > クリーン」を実施したら発生した、と書きましたが、あれは勘違いだったようです。
何度かビルドターゲットを「X10」と「Android1.6」にそれぞれ切り替えて確認してみましたが、「X10」にすると必ず発生し、「Android1.6」にすると1度も発生しなかったことから、私の環境ではこれが原因で間違いなさそうです。

しかし、ネットで検索をかけてみても同様の現象が出てる人はいない様子・・・
「Xperia X10」スキン&SDKインストールした時に失敗したのかしら。

2010年6月24日木曜日

[Android]実行構成でNullPointerException

以前からアプリをコンパイルし、Eclipseメニューの

「実行」⇒「実行構成」⇒Androidアプリケーション

を選択すると、NullPointerExceptionが発生していました。

[Error Message]
Error during launch: java.lang.NullPointerException

こんな感じ。
理由はどうやらdrawableフォルダの
・drawable-hdpi
・drawable-mdpi
・drawable-ldpi
が無かった為。
valuesフォルダのように、values-jaフォルダが無くてもデフォルトフォルダだけ用意しておけばいいものだと思っていました。
でも、drawableフォルダだけではエラーになるんですね。

2010年6月23日水曜日

[Android]XperiaのBluetooth電源ON/OFF

前にBluetooth通信の動作確認に使った「BluetoothChat」。
ソースコードを参考にさせていただきつつ、動作を確認していました。

すると、不思議なことにXperiaのBluetooth電源オフ状態でアプリを起動すると、
「Bluetooth is not available」
とToast表示が。
(ソースコードを見ると、Bluetooth非搭載の場合に表示される内容)

設定でBluetooth電源オンにすると表示されません。
XperiaではBluetooth電源オフ状態だとデフォルトのBluetooth Adapterが取得できないのでしょうか。
その後ろにBluetooth電源オフならオンにする処理が入っていますが・・・。

うーん?

[Android]XperiaのBluetoothペアリングの挙動

Androidスマートフォンと「ある機械」をBluetooth接続しようとした時に気になっていること。
それはペアリング情報の保持。

かつて、携帯電話と接続した時に、携帯電話側は過去にペアリングした機器の情報を保持しているにもかかわらず、「ある機械」側が全く保持できない構造だった為、お互いの情報交換やらサービス検索やら毎回やりなおす羽目になったことがありました。
やりなおすだけならいいんですけど、携帯電話側のアプリがBluetooth接続情報をプログラムからいじれない仕組みになっていたので、携帯電話側にペアリング情報が残っていると手動で情報を消さない限り進めなくなるという非常にいけてない仕組みだったので悲惨。

Androidで同じことにならないよね?という確認もこめて、XperiaでBluetoothのペアリングにおける挙動を確認。
esmasuiさんの「backport-android-bluetooth」を使わせていただいてます。

【実験】
Xperia側ではPair情報が保持されていて、「ある機械」側で情報が無い場合。Androidアプリでは画面上に「ある機械」の名前が表示されるのでタップタップ。

【結果】
Xperia側にパスキー入力ダイアログが表示されました。
相手にお前なんか知らないよと言われて、もう1度よろしくお願いしますっていう作法なんでしょうか。
礼儀正しくてステキです。

他機種でも同じ動きをするかどうかが気になります。

Logcatでのログ保存

実機(Xperia)に繋いで、DDMS経由でLogcatログを見る。

そこまではいいんですけど、ログをtxt形式で保存するのはどうすれば?
フロッピーな感じのアイコンは反転したままですし・・・

結論としてはLogcat窓の中の必要な部分をShift+方向キーで選択して、「▽」を押して「Export Selection As Text...」を選んで保存。

とりあえずこれで。

2010年6月2日水曜日

[Androidアプリ]Android1.6でBluetoothを使う

esmasuiさんの「backport-android-bluetooth」とサンプルコード「BluetoothChat」で、Xperiaと携帯電話以外の機器とのBluetooth通信が可能かどうかを確かめようと試みました。

「backport-android-bluetooth」
http://code.google.com/p/backport-android-bluetooth/

Source > Browse のところにサンプルソースがあるようです。
Source path: svn / trunk / backport-android-bluetooth201 / src / com / example / bluetooth / *.java

多分・・・。

ちなみにAndroid2.1のサンプルコード「BluetoothChat」をbackport用に変更したもののようです。
2.1用サンプルの方で最初やってみたんですが、Android1.6 -> 2.1で変更になった点でエラーが出たり、エミュ&実機でVerifyErrorが出たり。
xml関係ではこの部分で大量のエラーが。書き換えればOKでした

match_parent(Android2.1?) ⇒ fill_parent(Android1.x?)

VerifyErrorは原因がわからなかったので、改めて「backport-android-bluetooth」のサンプルコードの方でアプリをビルドして実機で実行。

RuntimeError・・・BluetoothAdapterクラスが無いだと??

「backport-android-bluetooth2.jar」をビルドパスに関連付けただけじゃダメなのかな?
/src以下にbackport.android.bluetoothパッケージを作って、ソースコード一式を置いてみる・・・

android.bluetooth.* 系が全部無いよ、エラー。

あまりに知識が無さ過ぎてどうすれバインダー状態。
/src以下にandroid.bluetoothパッケージも作って、ソースコード一式(以下略)
ここでAIDLなるファイルのことを知りました。
/src以下に拡張子aidlでファイル作っておいたら、/genの下にJavaファイルが出来る模様。

その状態でビルド、実行したら無事Xperia上で動作しました。
原因がわかってないことが多いけど、まずはBluetoothで接続&SPPにて通信が出来るかどうかを確認することが先なので接続相手を探してみる。

[1]手持ちのiPhone・・・iPhoneアプリ側に動作確認できるアプリがない。却下。
[2]手持ちの携帯電話・・・SPP通信用のアプリは入ってないので、SPPの上位プロファイルであるDUNで繋いでみる。
繋がるけどデータは何も飛んでこず。
そりゃそうだ。
[3]会社用の携帯・・・SPP通信用アプリが入っているけど、電池切れ。
充電器が無かったので後日に見送り。
[4]元々繋ごうと思ってた機器・・・よく考えたら、このド本命と繋げられるかどうかが大事なのであった。機器をセットアップして、いざ接続!

--------------------------------------
DEMO-1GOU
0x00012121@9abc ・・・
--------------------------------------
DEMO-1GOU
0x00045678@9abc ・・・
--------------------------------------
DEMO-1GOU
0x00099999@9abc ・・・
--------------------------------------

定期的に飛ばす電文が画面に表示されていきます。
メニューボタンを押して、接続メニューを出すことに気づくまで30分くらいかかったのはご愛嬌。
(それまではXperiaの「設定」からBluetooth接続させようとしてました)

iPhoneのようにiPhone系以外の機器とのSPP通信が制限されてる(?)かもしれないという危惧があったのですが、さすがはAndroid端末Xperia。
そんな制限は特になされていないようですね。

これで安心してBluetooth通信アプリが作れそうです。
問題は山積していますが・・・。
色々間違えていたらすみません。

2010年5月24日月曜日

[Androidアプリ]XperiaのUSBドライバー

開発用としてXperiaを入手しました。
さっそくapkをインストール・・・と思うと、USBがうまく認識してくれません。
USBマスストレージじゃダメだー。

設定 > アプリケーション > USBデバッグ

を有効にするとさらにUSBドライバを要求されたのですが、どこにドライバが?

答えは「Xperiaの中のmicroSD内」。
ついでにUSBストレージとして有効にする場合も、Xperia側から「マウント」する必要があります。
一般人にはハードル高い(笑)
普通は挿したら認識してくれると思いますもん。

マウント方法は、PCとXperaをUSBケーブルで接続した状態で、Xperiaの画面上端あたりを指で下方向になぞると出てくるメニューから行います。
「USB接続」なる文字の部分を指でタップするとマウントする/しないを聞かれますので、「マウント」を選択すればOK。
これでPCからXperiaの中のmicroSDの中が触れるようです。

USBドライバはマウントして、XperiaのmicroSDの中にある「CDBrowser/Drivers.zip」をPC上にコピー、解凍します。

マイコンピュータ > プロパティ > ハードウェア > デバイスマネージャ

でデバイスマネージャを開いて、「SEMC SO-01B」とかそんな感じの名前で「?」アイコンがついているところを右クリック。
「ドライバの更新」を選択して、先ほど解凍したDriversフォルダを指定しましょう。

私の場合はマウント方法でつまづきました。
参考になれば幸いです。

2010年5月21日金曜日

[Androidアプリ]xmlファイル書き換えるとEclipseでエラー(追記)

「[Androidアプリ]xmlファイル書き換えるとEclipseでエラー」
で書いた内容が発生した原因らしきものを書き忘れていました。

Eclipseの「プロジェクト」>「クリーン」を実行した直後からです。

Eclipse、使い慣れてないからかこんな変なエラーばっかりで時間を食われてしまう・・・。

[Androidアプリ]今度はNullPointerException

xmlファイルの部分で少し時間を食ったものの、無事サンプルコードが動いて一安心。

したのもつかの間。
その後、ソースコードを直して動きを確認しようと「実行」を押すとエラーが。

ダイアログには
「Java.lang.NullPointerException:"xxx起動"中に内部エラーが発生しました。」
というようなメッセージが表示されている。

何がNull?
エミュレータは起動してあるし・・・。

さっきリファクタリングした時に
------------------------------------------------------------------------------------------------
org.eclipse.core.internal.resources.ResourceException: リソース '/xxx が存在しません。
at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:319)
at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:196)
at org.eclipse.core.internal.resources.Project.checkAccessible(Project.java:113)
at org.eclipse.core.internal.resources.Project.hasNature(Project.java:489)
at com.android.ide.eclipse.adt.internal.project.FolderDecorator.decorate(Unknown Source)
at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:263)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:81)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:365)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:347)
at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:371)
at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:331)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
------------------------------------------------------------------------------------------------
というエラーが多発していたけど、このリソースのことかな?

比較のために新規プロジェクトを作成して、足りない部分を探してみる。
しかし、名前が違う以外は足りないものは無さそうだ。

エラーログには、
------------------------------------------------------------------------------------------------
java.lang.NullPointerException
at com.android.sdklib.AddOnTarget.isCompatibleBaseFor(AddOnTarget.java:230)
at com.android.sdkuilib.internal.widgets.AvdSelector$TargetBasedFilter.accept(AvdSelector.java:170)
at com.android.sdkuilib.internal.widgets.AvdSelector.fillTable(AvdSelector.java:727)
at com.android.sdkuilib.internal.widgets.AvdSelector.refresh(AvdSelector.java:432)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.updateAvdList(Unknown Source)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.initializeFrom(Unknown Source)
at org.eclipse.debug.ui.AbstractLaunchConfigurationTab.activated(AbstractLaunchConfigurationTab.java:354)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.handleTabSelected(LaunchConfigurationTabGroupViewer.java:1323)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$6.widgetSelected(LaunchConfigurationTabGroupViewer.java:434)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1027)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1012)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:770)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3256)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2045)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:323)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
------------------------------------------------------------------------------------------------
と、
------------------------------------------------------------------------------------------------
java.lang.NullPointerException
at com.android.sdklib.AddOnTarget.isCompatibleBaseFor(AddOnTarget.java:230)
at com.android.sdkuilib.internal.widgets.AvdSelector$TargetBasedFilter.accept(AvdSelector.java:170)
at com.android.sdkuilib.internal.widgets.AvdSelector.fillTable(AvdSelector.java:727)
at com.android.sdkuilib.internal.widgets.AvdSelector.refresh(AvdSelector.java:432)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.updateAvdList(Unknown Source)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.initializeFrom(Unknown Source)
at org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup.initializeFrom(AbstractLaunchConfigurationTabGroup.java:86)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupWrapper.initializeFrom(LaunchConfigurationTabGroupWrapper.java:194)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.displayInstanceTabs(LaunchConfigurationTabGroupViewer.java:804)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$8.run(LaunchConfigurationTabGroupViewer.java:680)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.inputChanged(LaunchConfigurationTabGroupViewer.java:697)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput0(LaunchConfigurationTabGroupViewer.java:659)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput(LaunchConfigurationTabGroupViewer.java:635)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.handleLaunchConfigurationSelectionChanged(LaunchConfigurationsDialog.java:916)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog$3.selectionChanged(LaunchConfigurationsDialog.java:544)
at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:864)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.runtime.Platform.run(Platform.java:888)
------------------------------------------------------------------------------------------------
の2つのメッセージが出ているがエミュレータへのランチャのところだろうか。

「実行構成」を開いてみるといきなりダイアログが表示されて、またもやNullPointerException。
実行構成から参照している部分が何か無いようだ。

結局、原因ははっきりとわからなかったが、メインのActivityを指定すると都度NullPointerExceptionを告げるダイアログが表示されたことから、このActivityが無い(?)か参照先がおかしくなっている模様。
解決方法を探ってみたがこんなことでハマってる人はいないようで、これという解決方法が見つからなかったので以下の力業で実行できるようにした。無理やり。

(1)プロジェクト一式を退避させる。
(2)新規プロジェクトを作成する。(前のプロジェクトと違う名前にする)
(3)ソース&リソース、設定ファイル等を全部新規プロジェクトに移し変える。
(4)必要な部分を修正。

こうしてNullPointerExceptionが発生して、動作確認が出来ない事態は避けられた。
だが、解決方法がはっきりしていない以上、発生する度にこんなことするのは時間の無駄だしどうしたものか。