我在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文件的包。
任何人都可以帮助我吗?
答案 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());
}
}