如何切换到具有main方法的Displayable类

时间:2013-01-20 07:16:10

标签: java java-me lcdui

我在java中工作,我正在尝试使用ok命令和返回命令在视觉设计之间切换。我有一个可显示的表单,我在我的主要课程formA中命名为A.java,在另一个课程formB中命名为B.java。我在formA中使用了一个ok命令,在选择时,应该将用户带到formB。首先,当我尝试从我的主类调用getFormB方法时,它不起作用(无法从静态上下文引用非静态方法)。

我被建议创建对B.java的引用,所以我在我的主要课程A.java中添加了这一行

B b = new B(this);

现在我可以从formA中的commandAction调用getFormB方法。在这一点上,一切都运行良好,但当我尝试添加一个backCommand,它应该让我回到formA中的A.java我再次得到ds错误'非静态方法getFormA()不能从静态上下文引用',所以我尝试在B.java中创建一个引用,就像我在A.java中所做的那样,这里是代码:

A a = new A(); 

然后在命令操作中我在backCommand上执行了ds:

switchDisplayable(null, a.getFormA()); 

这一次,它编译时没有错误。但是在运行时我得到一个SecurityException MIDlet Manager ERROR:

  

非法尝试构建hello.A@e938beb1

'hello'是包含两个java文件的包。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您的A类似乎扩展了MIDlet。如果是这种情况,你不应该尝试制作它的新实例 您应该为B类添加A属性,并将实例作为构造函数参数接收或具有setter方法 有了这个,你可以从属性中调用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());
  }
}