Java 如何在圆圈中导航
这个标题可能不是很有描述性,但我想不出更好的了 问题如下: 我有一个屏幕(屏幕一)与另一个屏幕(屏幕二)的链接。 屏幕2上有一个指向屏幕1的链接 我通过自定义RichTextFields和自定义ChangeListener实现了这一点 现在的问题是,我一直得到一个堆栈溢出错误! 有没有办法这样来回导航 问候马特Java 如何在圆圈中导航,java,user-interface,blackberry,Java,User Interface,Blackberry,这个标题可能不是很有描述性,但我想不出更好的了 问题如下: 我有一个屏幕(屏幕一)与另一个屏幕(屏幕二)的链接。 屏幕2上有一个指向屏幕1的链接 我通过自定义RichTextFields和自定义ChangeListener实现了这一点 现在的问题是,我一直得到一个堆栈溢出错误! 有没有办法这样来回导航 问候马特 public class MyApp extends UiApplication { public static void main(String[] args) {
public class MyApp extends UiApplication
{
public static void main(String[] args)
{
MyApp theApp = new MyApp();
theApp.enterEventDispatcher();
}
public MyApp()
{
ScreenOne so = ScreenProvider.getInstance().getScreenOne();
so.initialize();
ScreenProvider.getInstance().getScreenTwo().initialize();
pushScreen(so);
}
}
public class ScreenOne extends MainScreen {
MyTextField link;
public ScreenOne() {
link = new MyTextField("FirstScreen");
add(link);
}
public void initialize(){
link.setChangeListener((FieldChangeListener) new MyFieldChangeListener(ScreenProvider.getInstance().getScreenTwo()));
}
}
public class ScreenTwo extends MainScreen {
MyTextField link;
public ScreenTwo() {
link = new MyTextField("SecondScreen");
add(link);
}
public void initialize(){
link.setChangeListener((FieldChangeListener) new MyFieldChangeListener(ScreenProvider.getInstance().getScreenOne()));
}
}
public class MyFieldChangeListener implements FieldChangeListener {
private Screen nextScreen;
public MyFieldChangeListener(Screen nextScreen) {
this.nextScreen = nextScreen;
}
public void fieldChanged(Field field, int context) {
UiApplication.getUiApplication().pushScreen(nextScreen);
}
}
public class MyTextField extends RichTextField {
public MyTextField() {
super();
}
public MyTextField(String text) {
super(text);
}
protected boolean touchEvent(TouchEvent message) {
if (TouchEvent.CLICK == message.getEvent()) {
FieldChangeListener listener = getChangeListener();
if (null != listener)
listener.fieldChanged(this, 1);
}
return super.touchEvent(message);
}
}
public class ScreenProvider {
private static ScreenProvider instance = null;
private ScreenProvider(){}
public static ScreenProvider getInstance() {
if (instance == null) {
instance = new ScreenProvider();
}
return instance;
}
private ScreenOne screenOne = new ScreenOne();
private ScreenTwo screenTwo = new ScreenTwo();
public ScreenOne getScreenOne() {
return screenOne;
}
public ScreenTwo getScreenTwo() {
return screenTwo;
}
}
溢出错误可能是由于不断从ScreenOne和ScreenTwo跳转而导致的无限循环的结果。您能描述一下您实际想要完成的任务和/或显示一段代码吗?溢出错误可能是由于不断从ScreenOne和ScreenTwo跳转而导致的无限循环造成的。你能描述一下你想要完成什么和/或显示一段代码吗?ScreenOne的构造函数创建一个ScreenTwo实例,ScreenTwo的构造函数创建一个ScreenOne实例。这里有一个无限循环。ScreenOne的构造函数创建一个ScreenTwo实例,ScreenTwo的构造函数创建一个ScreenOne实例。这里有一个无限循环。在ScreenProvider中,不需要将screen1/screen2设置为静态——它们是singleton实例的成员
除此之外,我在当前版本中看到的另一个问题是,您将把一个屏幕推到堆栈上——它已经在堆栈上了。尝试先弹出前面的屏幕 在ScreenProvider中,不需要将screen1/screen2设置为静态,因为它们是singleton实例的成员
除此之外,我在当前版本中看到的另一个问题是,您将把一个屏幕推到堆栈上——它已经在堆栈上了。尝试先弹出前面的屏幕 关于这个问题的第5次修订: new ScreenProvider()->new ScreenOne()->ScreenProvider.getInstance()->new ScreenProvider()-> 仍然是无限的。同样,问题是您试图通过对象构造函数设置一个循环。您需要先创建对象,然后指定下一个和上一个
关于该问题的第4版: getScreenOne()->new ScreenOne()->getScreenTwo()->new ScreenTwo()->getScreenOne()->newScreenOne()->
您仍然有一个无限循环,因为构造函数试图存储彼此的实例。您需要首先构造对象,然后添加循环引用。关于此问题的第5版: new ScreenProvider()->new ScreenOne()->ScreenProvider.getInstance()->new ScreenProvider()-> 仍然是无限的。同样,问题是您试图通过对象构造函数设置一个循环。您需要先创建对象,然后指定下一个和上一个
关于该问题的第4版: getScreenOne()->new ScreenOne()->getScreenTwo()->new ScreenTwo()->getScreenOne()->newScreenOne()->
您仍然有一个无限循环,因为构造函数试图存储彼此的实例。您需要首先构造对象,然后添加循环引用。我也考虑过这一点,但将屏幕编写为单例也没有帮助。(将发布更多代码)这个星座图的目的是,我想实现一种“选项卡视图”,在其中我需要在特定的“选项卡”之间导航。添加了另一个版本,试图避免在单击链接时创建新对象。我也考虑过这一点,但也把屏幕写为单例没有帮助。(将发布更多代码)这个星座的目的是,我想实现一种“选项卡视图”,在其中我需要在添加了其他版本的特定“选项卡”之间导航,试图避免在单击链接时创建新对象。我不明白为什么这个不起作用。请发布异常的堆栈跟踪,并告诉我们哪一行代码对应堆栈跟踪中的哪一行号。我无法进行调试,因此我认为无法获取堆栈跟踪:(您可以通过从主屏幕转到事件日志来获取堆栈跟踪,ALT+L ALT+G ALT+L ALT+GI不明白为什么这个不能工作。请发布异常的堆栈跟踪,并告诉我们哪行代码对应堆栈跟踪中的哪一行号。我无法进行调试,因此我认为无法获取堆栈跟踪:(您可以通过从主屏幕转到事件日志来获取堆栈跟踪,ALT+L ALT+G ALT+L ALT+GI添加了一种弹出上一屏幕的方式,但仍然不起作用。我添加了一种弹出上一屏幕的方式,但仍然不起作用。您可以更详细地解释一下或发布一个示例吗?我不太确定您的意思……我修改了上述代码(仍不工作),这就是你的意思吗?第6版又一次尝试。我现在将构造和循环设置分开。现在,当单击屏幕上的链接时,它会给我一个运行时异常。第6版编译时没有错误吗?代码使用一个参数调用MyFieldChangeListener构造函数,但只有一个两个参数的构造函数。这不起作用。Eclipse将运行带有编译器错误的代码-它只是在编译错误处插入异常。这可能就是您现在看到的。根据我的视觉检查,rev 7看起来不错。您仍然看到问题吗?您能更详细地解释一下吗?或者发布一个示例,我不太确定您的意思…我修改了cod上面的e(仍然不工作),这是你的意思吗?第6版又一次尝试。我现在分离了构造和循环设置。当点击屏幕2上的链接时,它现在给我一个运行时异常。第6版编译没有错误吗?代码用一个调用MyFieldChangeListener构造函数