运行缓慢,内存使用率高

时间:2013-01-11 21:48:32

标签: java performance memory

我正在为我的班级写一个基于文本的小游戏。导航很简单,玩家点击按钮进入不同的部分。所有这些部分都分成了自己的代码块。到目前为止,我只设置了两个部件,每个部件都可以通过按钮相互连接。基本上是:

private void level1() {
//Stuff here, player clicks a button which runs "level2();"
}

private void level2() {
//Stuff here, player clicks a button which runs "level1();"
}

这样工作得很好,但是在1和1之间来回点击之后。 2,程序开始运行很慢。任务管理器报告大约700MB的内存使用量。

我确信我有一些非常明显的东西。我正在寻找一种方法让用户能够多次点击许多按钮,而不是让程序使用这么多资源。非常感谢帮助。

编辑:更多代码。 Choice1-3是按钮的名称。变量已在程序顶部声明,并在初始化部分中设置。它们将被每个代码块修改,例如Scene1和2。

private void setScene1() // TITLE SCREEN
{
    TITLE.setText("Title Label");
    main.setText("Main text body for the game.");
    choice1.setText("Play");
    choice1.setBounds(10, 600, 996, 91); // This makes choice1 as large as
                                            // all three buttons combined.
    choice2.setEnabled(false);// There's only one option anyway.
    choice3.setEnabled(false);
    choice2.setVisible(false);
    choice3.setVisible(false);

    choice1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            setScene2();
        }
    });

}

private void setScene2() // CHARACTER GENERATION SCENE
{
    TITLE.setText("Character Generation");
    main.setEnabled(false); // Disable & Hide the main text window, as
                            // Chargen requires a nicer looking interface.
    main.setVisible(false);
    choice2.setEnabled(true);
    choice2.setVisible(true);
    choice1.setBounds(10, 600, 996, 34); //Resizing the bottom portion to fit two buttons
    choice2.setBounds(10, 645, 996, 34);
    choice1.setText("Continue");
    choice1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            // Nothing here for now
        }
    });
    choice2.setText("Back to the Title Screen");
    choice2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            main.setEnabled(true);
            main.setVisible(true);
            setScene1();
        }
    });

}

3 个答案:

答案 0 :(得分:2)

如果这两种方法继续相互调用,你最终会通过你的记忆吃掉:这是递归。如果你永远不会返回呼叫树,那么它就会被任意深入直到繁荣。

答案 1 :(得分:2)

问题似乎在于每次切换场景时都要添加ActionListener。以前的ActionListener永远不会消失,但是你会在它上面堆叠更多的东西来做同样的事情。每个都执行相同的操作,因此当您按切换场景时,它现在拥有的所有ActionListner也将切换场景。你的CPU会上升,因为现在有2 ^ n个ActionListener在等待输入,并且有很多内存在内存中。

答案 2 :(得分:1)

您应该在构造函数或其他位置添加ActionListeners。这样你每次都会添加一个新的ActionListener(即使它是相同的)你按下按钮。