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 中所做的:

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 中的类调用方法。非常简单,但我的解决方案使用单例,我想避免它以及静态方法。

于 2013-02-07T15:24:56.013 回答
0

您在 Control 类中访问包,但无权访问其方法start()abort(),因为访问不带修饰符的方法的标准是包级别。您必须定义公共方法,或者通过将其他类定义为子类来保护。

于 2013-01-13T10:13:01.427 回答
0

确保对包 B public 中的类使用 public 访问修饰符而不是 default 修饰符!

于 2013-01-13T10:22:28.190 回答