web-dev-qa-db-ja.com

Eclipseは、Android junitテスト構成の作成時にJava.lang.NullPointerExceptionをスローします

私はAndroidプロジェクトを持っています。

プロジェクトのテストプロジェクトを作成しました developer.Android.comでADTを使用してEclipseからテストする のようにテスト構成を作成してみてください。

私の行動:

  • 実行->実行構成
  • Android JUnit Test-> Newを選択します
  • 「エラーが発生しました。詳細についてはエラーログを参照してください。Java.lang.NullPointerException」というエラーメッセージが表示されます。
  • ログ:

    Problems occurred when invoking code from plug-in: "org.Eclipse.jface".
    
    Java.lang.NullPointerException
    at com.Android.ide.Eclipse.adt.internal.launch.junit.InstrumentationRunnerValidator.<init>(InstrumentationRunnerValidator.Java:48)
    at com.Android.ide.Eclipse.adt.internal.launch.junit.InstrumentationRunnerValidator.<init>(InstrumentationRunnerValidator.Java:59)
    at com.Android.ide.Eclipse.adt.internal.launch.junit.AndroidJUnitLaunchConfigurationTab.loadInstrumentations(AndroidJUnitLaunchConfigurationTab.Java:954)
    at com.Android.ide.Eclipse.adt.internal.launch.junit.AndroidJUnitLaunchConfigurationTab.initializeFrom(AndroidJUnitLaunchConfigurationTab.Java:335)
    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:751)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$8.run(LaunchConfigurationTabGroupViewer.Java:623)
    at org.Eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.Java:70)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.inputChanged(LaunchConfigurationTabGroupViewer.Java:640)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput0(LaunchConfigurationTabGroupViewer.Java:602)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput(LaunchConfigurationTabGroupViewer.Java:578)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.handleLaunchConfigurationSelectionChanged(LaunchConfigurationsDialog.Java:941)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog$3.selectionChanged(LaunchConfigurationsDialog.Java:560)
    at org.Eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.Java:888)
    at org.Eclipse.core.runtime.SafeRunner.run(SafeRunner.Java:42)
    at org.Eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.Java:49)
    at org.Eclipse.jface.util.SafeRunnable.run(SafeRunnable.Java:175)
    at org.Eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.Java:886)
    at org.Eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.Java:1726)
    at org.Eclipse.jface.viewers.TreeViewer.setSelection(TreeViewer.Java:1139)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationView.handleConfigurationAdded(LaunchConfigurationView.Java:283)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationView.access$1(LaunchConfigurationView.Java:272)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationView$2.run(LaunchConfigurationView.Java:261)
    at org.Eclipse.swt.widgets.RunnableLock.run(RunnableLock.Java:35)
    at org.Eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.Java:135)
    at org.Eclipse.swt.widgets.Display.runAsyncMessages(Display.Java:4140)
    at org.Eclipse.swt.widgets.Display.readAndDispatch(Display.Java:3757)
    at org.Eclipse.jface.window.Window.runEventLoop(Window.Java:825)
    at org.Eclipse.jface.window.Window.open(Window.Java:801)
    at org.Eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.open(LaunchConfigurationsDialog.Java:1132)
    at org.Eclipse.debug.ui.DebugUITools$2.run(DebugUITools.Java:579)
    at org.Eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.Java:70)
    at org.Eclipse.debug.ui.DebugUITools.openLaunchConfigurationDialogOnGroup(DebugUITools.Java:587)
    at org.Eclipse.debug.ui.DebugUITools.openLaunchConfigurationDialogOnGroup(DebugUITools.Java:521)
    at org.Eclipse.debug.ui.actions.OpenLaunchDialogAction.run(OpenLaunchDialogAction.Java:81)
    at org.Eclipse.jface.action.Action.runWithEvent(Action.Java:498)
    at org.Eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.Java:584)
    at org.Eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.Java:501)
    at org.Eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.Java:411)
    at org.Eclipse.swt.widgets.EventTable.sendEvent(EventTable.Java:84)
    at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1053)
    at org.Eclipse.swt.widgets.Display.runDeferredEvents(Display.Java:4165)
    at org.Eclipse.swt.widgets.Display.readAndDispatch(Display.Java:3754)
    at org.Eclipse.jface.window.Window.runEventLoop(Window.Java:825)
    at org.Eclipse.jface.window.Window.open(Window.Java:801)
    at org.Eclipse.ui.internal.views.log.EventDetailsDialog.open(EventDetailsDialog.Java:180)
    at org.Eclipse.ui.internal.views.log.EventDetailsDialogAction.run(EventDetailsDialogAction.Java:98)
    at org.Eclipse.ui.internal.views.log.LogView$15.doubleClick(LogView.Java:535)
    at org.Eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.Java:845)
    at org.Eclipse.core.runtime.SafeRunner.run(SafeRunner.Java:42)
    at org.Eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.Java:49)
    at org.Eclipse.jface.util.SafeRunnable.run(SafeRunnable.Java:175)
    at org.Eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.Java:843)
    at org.Eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.Java:1462)
    at org.Eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.Java:1246)
    at org.Eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.Java:249)
    at org.Eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.Java:246)
    at org.Eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.Java:307)
    at org.Eclipse.swt.widgets.EventTable.sendEvent(EventTable.Java:84)
    at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1053)
    at org.Eclipse.swt.widgets.Display.runDeferredEvents(Display.Java:4165)
    at org.Eclipse.swt.widgets.Display.readAndDispatch(Display.Java:3754)
    at org.Eclipse.ui.internal.Workbench.runEventLoop(Workbench.Java:2696)
    at org.Eclipse.ui.internal.Workbench.runUI(Workbench.Java:2660)
    at org.Eclipse.ui.internal.Workbench.access$4(Workbench.Java:2494)
    at org.Eclipse.ui.internal.Workbench$7.run(Workbench.Java:674)
    at org.Eclipse.core.databinding.observable.Realm.runWithDefault(Realm.Java:332)
    at org.Eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.Java:667)
    at org.Eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.Java:149)
    at org.Eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.Java:123)
    at org.Eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.Java:196)
    at org.Eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.Java:110)
    at org.Eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.Java:79)
    at org.Eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.Java:344)
    at org.Eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.Java:179)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at Java.lang.reflect.Method.invoke(Unknown Source)
    at org.Eclipse.equinox.launcher.Main.invokeFramework(Main.Java:622)
    at org.Eclipse.equinox.launcher.Main.basicRun(Main.Java:577)
    at org.Eclipse.equinox.launcher.Main.run(Main.Java:1410)
    at org.Eclipse.equinox.launcher.Main.main(Main.Java:1386)
    

この構成は編集できますが、[適用]ボタンと[実行]ボタンが無効になり、構成が実行ボタンメニューに追加されません。

デバッグ構成を編集しようとすると、同じ問題が発生します。

システム:

  • Eclipseバージョン:3.7.1(最新)
  • Windows 7 x64
13
npakudin

私はEclipseインストールで動作するように見える回避策を見つけました。

  1. Eclipseを起動する
  2. 「実行」メニューから「実行構成」をリストします。
  3. 「Android JUnit Test」カテゴリを選択し、「新規」ツールバーアイコンをクリックします。
  4. 「New_configuration」が作成されますが、「NullPointerException」が表示されます。この後、構成を編集することはできません。
  5. Eclipseを終了する
  6. ファイルエクスプローラーを開き、[Eclipse-workspace] .metadata.plugins\org.Eclipse.debug.core.launchesに移動します
  7. これは、実行構成が格納される場所です。ファイル「New_configuration.launch」をテキストエディタで編集します。
  8. PROJEC_ATTRノードの空のエントリは存在できません。 value属性には、Eclipseに存在するプロジェクトの名前を入力します。
  9. ファイルを保存します。
  10. ファイルの名前を目的の実行構成名に変更します。
  11. Eclipseを起動する

これで、NullPointer例外を受け取ることなく、AndroidのJUnitテスト構成を編集できるようになりました。これを行った後、構成ファイルに追加されていたXMLノードがいくつかあります。 。したがって、バグはファイルの作成中にのみ発生し、ファイルの更新中には発生しないようです。

これが他の人の役に立つことを願っています。

以下は、機能するサンプル起動ファイルです(プロジェクト名がGemsTestであると想定しています)。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <launchConfiguration type="com.Android.ide.Eclipse.adt.junit.launchConfigurationType">
    <stringAttribute key="com.Android.ide.Eclipse.adt.commandline" value=""/>
    <intAttribute key="com.Android.ide.Eclipse.adt.delay" value="0"/>
    <booleanAttribute key="com.Android.ide.Eclipse.adt.nobootanim" value="false"/>
    <intAttribute key="com.Android.ide.Eclipse.adt.speed" value="0"/>
    <stringAttribute key="com.Android.ide.Eclipse.adt.target" value="AUTO"/>
    <booleanAttribute key="com.Android.ide.Eclipse.adt.wipedata" value="false"/>
    <stringAttribute key="org.Eclipse.jdt.junit.CONTAINER" value=""/>
    <stringAttribute key="org.Eclipse.jdt.launching.MAIN_TYPE" value=""/>
    <stringAttribute key="org.Eclipse.jdt.launching.PROJECT_ATTR" value="GemsTest"/>
</launchConfiguration>
4
Reactgular

回避策を見つけたようですが、奇妙なことです。

  • リストアイテム
  • プロジェクトを選択
  • プロジェクト->プロパティ
  • Javaビルドパス->注文とエクスポート
  • チェックしていないライブラリをチェックしてチェックを外します
  • OKを押します
  • これで、Android JUnitテスト構成を通常どおり作成できます。
3
npakudin

残念ながら、上記の解決策は私の場合には役に立ちません。

ここで問題についての議論がありますが、「すべてを最初から再インストールする」以外に提案された解決策はありません。

http://groups.google.com/group/Android-developers/browse_thread/thread/13559a5696988c5c

Eclipse 3.7.2、Android Tools 16.0.1

2
johsin18

私はあなたの問題に対する答えを見つけたと思います。最初に、「Androidテストプロジェクト」としてテストプロジェクトを作成する代わりに、単純な「Javaプロジェクト」を作成し、それを「Androidプロジェクト」に採用しようとしているように見えます。

解決:

  1. 既存のテストプロジェクトを削除する
  2. [ファイル]-> [新規]-> [その他]に移動します。
  3. 「Android Test Project」を選択します
  4. ウィザードを通過

ここで、[実行]-> [構成の実行]に移動してAndroid JUnitテストの問題は発生しません。

お役に立てば幸いです。

2
Kamil Grabowski

EclipseはJavaで記述されているため、問題はAndroid作業中のプロジェクトではなくEclipseにある可能性があります。 nullpointerexceptionがあり、ユーザーが作成したデバイス定義に基づくAVDを削除したため(これが具体的に関連しているかどうかは不明です)、AVDを変更しようとしてもnullpointerexceptionが返されました。最初のAVDを再作成し、エラーは消えた。