2010年5月21日金曜日

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

0 件のコメント:

コメントを投稿