Java me 如何在游戏中处理堆栈溢出异常?

Java me 如何在游戏中处理堆栈溢出异常?,java-me,Java Me,如何处理游戏中出现的堆栈溢出异常?请尽快回复 坦率地说,您可能不应该尝试处理堆栈溢出异常 try { //your work } catch(StackOverflowException ex) { // handle it } public static void main(String args[]) { try { LongRecursiveMethodOrSomethingLikeThat(); } c

如何处理游戏中出现的堆栈溢出异常?请尽快回复

坦率地说,您可能不应该尝试处理堆栈溢出异常

try
{
    //your work
}
catch(StackOverflowException ex)
{
     // handle it
}
public static void main(String args[])
{
        try 
    {
            LongRecursiveMethodOrSomethingLikeThat();
        } catch(StackOverflowError t) {
            // Generic catch// catch(Error e)
            // anything: catch(Throwable t)
            System.out.println("Error:"+t);
            t.printStackTrace();
}
在某些情况下,您无法执行代码来响应堆栈溢出异常,因为该代码需要堆栈空间,而堆栈空间不可用,因此出现双重错误

相反,您应该更改代码以完全避免它


这可能意味着将算法更改为其他算法,或者可能在自己的堆栈中实现基于堆栈的递归,并切换到循环。

堆栈溢出通常与递归调用有关,而不是gc

GC将抛出内存不足异常

public static void main(String args[])
{
        try 
    {
            LongRecursiveMethodOrSomethingLikeThat();
        } catch(StackOverflowError t) {
            // Generic catch// catch(Error e)
            // anything: catch(Throwable t)
            System.out.println("Error:"+t);
            t.printStackTrace();
}

.WriteLine(或java等效程序)需要堆栈空间。这能100%奏效吗?我相当怀疑它。@lassev.Karlsen@bzlm更新了它是的,但是尽管这删除了我想知道的代码,它仍然留下了问题。在保证正常工作、不需要堆栈空间的catch块内,您可以做些什么?@Lasse V.Karlsen我想我们可以向用户发出警报,告诉他们发生了意外事件,应用程序即将关闭:)在某些情况下我们可以处理,但对于整个场景,我们应该清楚地了解系统,您打算如何发出警报?记住,你不能调用任何代码,你没有堆栈空间。或者,如果您在调用堆栈中捕捉到足够低的值,那么堆栈是否已被取消?很抱歉,我对Java的了解不够,无法回答这个问题。我的代码中有错误,如何停止?@bzlm您的评论是指问题标题包含短语“堆栈溢出”?;)@当然是加雷斯。在这里,要么java堆栈以一种非常不寻常的方式使用,要么错误是因为递归。对吗?这安全吗?堆栈是否已展开,以便在catch块中实际拥有堆栈空间?“如果没有,你怎么能打电话给任何人?”拉塞V.卡尔森:我知道你从哪里来。捕获中的声明不太可能起作用。理想情况下,当堆栈流发生时,它应该让应用程序崩溃。请注意,我不知道:)我只是在问,在.NET中,您不能假设您有任何调用的堆栈空间,但在Java中,您可能会,例如,它可能会将堆栈从异常点放回catch块,这样就释放了足够的空间在那里执行代码。@Lasse V.Karlsen:可以通过增加堆栈大小或以某种方式重新启动虚拟机来解决。签出,但这两种解决方案都不是您可以从catch块中执行的。