1

私はこの単純なJavaコードを持っています:

package com.androiddesktoptest.testtest;

public class AndroidDesktopTestMain
{
    public static void main(String[] args)
    {
        callFromAndroid();
    }

    public static void callFromAndroid()
    {
        System.out.println("DESKTOP CODE CALLED FROM ANDROID");
    }
}

そして、次のようにAndroidから呼び出したい:

import com.androiddesktoptest.testtest.AndroidDesktopTestMain;

public void onCreate(Bundle savedInstanceState)
{
    //...
    AndroidDesktopTestMain.callFromAndroid();
}

そして私は得るjava.lang.NoClassDefFoundError

私は Eclipse を使用しており、私のプロジェクト AndroidDesktopTest は AndroidDesktopTest/src をエクスポートすることを確認しています。また、Eclipse は Android で自分のコードをオートコンプリートするため、デスクトップ プロジェクトで自分のコードが正しく表示されます。

私が間違っていることは何ですか?前々々々々のプロジェクトでこんなことをやっていたのですが、今回からADTが変わったのか何か...

* UPDATE * 全体のエラー 07-20 14:02:56.452: E/AndroidRuntime(30233): java.lang.NoClassDefFoundError: com.androiddesktoptest.testtest.AndroidDesktopTestMain

4

4 に答える 4

3

Order&Exportは、AndroidADTの最もよく構築された機能ではありません。

代わりに、デスクトッププロジェクトからAndroidプロジェクトにリンクされたsrcフォルダーを含めると([プロジェクト]>[ビルドパス]>[リンクソースフォルダー]を右クリック)、クラスはAndroidプロジェクトに属しているかのように使用されます。

これを行うための好ましい方法は、jarファイルまたはライブラリプロジェクトを作成することだと思いますが、安定したDeskptopコードが得られるまで、これらを試すのは面倒かもしれません。

お役に立てば幸いです。

于 2012-07-20T13:31:19.710 に答える
2

Androidを実行しているときに、クラスを電話に渡さないように聞こえます。

次のことを確認してください。

プロジェクトを右クリック - プロパティ - Java ビルド パス - 注文とエクスポート (ここでチェックされていますか?)

于 2012-07-20T12:47:58.863 に答える
0

Android プロジェクトへの Java ライブラリの組み込みに関するこの記事では、リンクされた Java プロジェクトのビルド パス ダイアログで、「JRE System Library」を API レベルの android.jar に置き換えることを提案しています。

于 2012-07-20T13:34:38.400 に答える
-1

これを試して

new AndroidDesktopTestMain.callFromAndroid();

静的メソッドから非静的メソッドを呼び出す唯一の方法は、非静的メソッドを含むクラスのインスタンスを持つことです。定義上、非静的メソッドはあるクラスのインスタンスで呼び出されるメソッドですが、静的メソッドはクラス自体に属します。

于 2012-07-20T12:41:37.150 に答える