Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在圆圈中导航_Java_User Interface_Blackberry - Fatal编程技术网

Java 如何在圆圈中导航

Java 如何在圆圈中导航,java,user-interface,blackberry,Java,User Interface,Blackberry,这个标题可能不是很有描述性,但我想不出更好的了 问题如下: 我有一个屏幕(屏幕一)与另一个屏幕(屏幕二)的链接。 屏幕2上有一个指向屏幕1的链接 我通过自定义RichTextFields和自定义ChangeListener实现了这一点 现在的问题是,我一直得到一个堆栈溢出错误! 有没有办法这样来回导航 问候马特 public class MyApp extends UiApplication { public static void main(String[] args) {

这个标题可能不是很有描述性,但我想不出更好的了

问题如下: 我有一个屏幕(屏幕一)与另一个屏幕(屏幕二)的链接。 屏幕2上有一个指向屏幕1的链接

我通过自定义RichTextFields和自定义ChangeListener实现了这一点

现在的问题是,我一直得到一个堆栈溢出错误! 有没有办法这样来回导航

问候马特

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构造函数