1

GUIボタンによって起動されるコマンドがあります。例:開始と中止。これらのコマンドは、ボタンをクリックした後、actionPerformedメソッドで実行されます。GUIとコマンドはパッケージAに含まれています。パッケージBIには、外部ライブラリからメソッドを呼び出すクラスがあります。

パッケージBの例:

class Control {
    void start() {
      extLib.start();
    }

    void abort() {
      extLib.abort();
    }
  }

パッケージAのクラスはパッケージBのクラスにアクセスできません。コマンドでControlクラスのメソッドを実行するにはどうすればよいですか?ご協力いただきありがとうございます。

4

4 に答える 4

1

利用可能な場合はこれclass Aを追加します。import yourpackage.*;class B

これで、これを行うことでControlクラスを参照できます。

Control c = new Control ();
c.start();
于 2013-01-11T16:36:58.197 に答える
0

パッケージ B public のクラスには、デフォルトの修飾子ではなく public アクセス修飾子を必ず使用してください。

于 2013-01-13T10:22:28.190 に答える
0

私の質問はおそらく不明確または不完全でした。申し訳ありません。 パッケージB
で私がしたことは次のとおりです。

package b.startup

public class Initialize {
  public Initialize() {
    CmdFactory.getInstance().setControlAdapter(new ControlAdapter());
  }
}


package b.control
public class ControlAdapter implements Control {
  public void start() { extLib.start() };
  public void abort() { extLib.abort() };
}


パッケージA

package a.control
  public interface Control {
    void start();
    void abort();
  }


package a.cmd
    public class StartCmd extends Command {
      public void execute(/* Some parameters */) {
        CmdFactory.getInstance.getControlAdapter().start(/* Some parameters */);
      }
    }


package a.factory
public class CmdFactory {
  Control control;
  // Constructor for default control
  // Getter and Setter for control.
}


パッケージAのクラスは、パッケージBのクラスからメソッドを呼び出さないでください。非常に単純ですが、私のソリューションはSingletonを使用しており、静的メソッドと同様にそれを避けたかったのです。

于 2013-02-07T15:24:56.013 に答える
0

You access the package in the Control class, but do not have access to its methods start() and abort(), as the criteria for access to the methods without modifiers is package level. You must define the public methods, or alternatively protected by defining the other class as subclass.

于 2013-01-13T10:13:01.427 に答える