2

私はjavameで作業しており、okコマンドとbackコマンドを使用してビジュアルデザインを切り替えようとしています。formAメインクラスA.javaformB別のクラスで名前を付けた表示可能なフォームがありB.javaます。okコマンドを使用しました。このコマンドformAを選択すると、ユーザーはに移動しformBます。最初にメインクラスからメソッドを呼び出そうとしたときgetFormB、それは機能しませんでした(非静的メソッドは静的コンテキストから参照できません)。

B.javaへの参照を作成するようにアドバイスされたので、この行をメインクラスに追加しましたA.java

B b = new B(this);

これで、のcommandActionからgetFormBメソッドを呼び出すことができますformAformAこの時点で、すべてが正常に機能しましたが、に戻るはずのbackCommandを追加しようとすると、A.java再びdsエラーが発生します。「非静的メソッドgetFormA()は静的コンテキストから参照できません」ので、で参照を作成してみました。B.java私が行ったのと同じようにA.java、コードは次のとおりです。

A a = new A(); 

次に、コマンドアクションで、backCommandでdsを実行しました。

switchDisplayable(null, a.getFormA()); 

今回はエラーなしでコンパイルしました。しかし、実行時にSecurityExceptionMIDletManagerエラーが発生します。

hello.A@e938beb1を構築する違法な試み

「hello」は、両方のJavaファイルを含むパッケージです。

誰かが私を助けることができますか?

4

1 に答える 1

2

あなたの A クラスは MIDlet を拡張しているようです。この場合、新しいインスタンスを作成しようとしないでください。
A 属性を B クラスに追加し、インスタンスをコンストラクター パラメーターとして受け取るか、セッター メソッドを使用する必要があります。
これにより、属性から getFormA() メソッドを呼び出すことができます。
アップデート

public class A extends MIDlet {
  B b;

  public A() {
    b = new B(this);
  }
}

class B {
  A a;

  B(A a) {
    this.a = a;
  }

  public void commandAction(Command c, Displayable d) {
    switchDisplayable(null, a.getFormA());
  }
}
于 2013-01-21T14:01:09.023 に答える