java.lang.OutOfMemoryError无法创建新的本机线程

java.lang.OutOfMemoryError无法创建新的本机线程,java,swing,timer,jtable,global-variables,Java,Swing,Timer,Jtable,Global Variables,(在NetBeans/Java中工作)我使用一个按钮从外部源中检索值,虽然存在一些小问题,但一切都很好,然后我开始遇到Java.lang.OutOfMemory错误:无法创建新的本机线程异常 此应用程序将外部值写入JTable。此外部值是其他位置的公共变量 我知道使用多个JFrame是不好的做法,但我不认为重新创建一个全新的Java卡或选项窗格/对话框有什么意义。我还决心创造一个工作环境,让事情顺利进行 是什么原因造成的?我该如何修复 这是密码。异常指向Timer=new Timer() 你有一

(在NetBeans/Java中工作)我使用一个按钮从外部源中检索值,虽然存在一些小问题,但一切都很好,然后我开始遇到
Java.lang.OutOfMemory错误:无法创建新的本机线程
异常

此应用程序将外部值写入JTable。此外部值是其他位置的公共变量

我知道使用多个JFrame是不好的做法,但我不认为重新创建一个全新的Java卡或选项窗格/对话框有什么意义。我还决心创造一个工作环境,让事情顺利进行

是什么原因造成的?我该如何修复

这是密码。异常指向
Timer=new Timer()


你有一个大问题。等等,这还不够大:

重大问题 更好

您正忙着在
do
循环中等待,每次都会启动一个新的
计时器

do {
    Timer timer = new Timer();
    //some other stuff
} while (newUser.isVisible());
这导致数千(数百万?)个
计时器
实例被创建,每个实例都有自己的
线程

  • 从不忙着等待
  • 不要创建数千个
    计时器
    实例
  • 此外,您正在使用not,这意味着最终操作不会在EDT上执行

    如果使用Swing线程策略,则这是一种违规行为。Swing对象(中除外)不是线程安全的,只能从EDT访问


    简言之;这段代码几乎没有错误。

    您有一个大问题。等等,这还不够大:

    重大问题 更好

    您正忙着在
    do
    循环中等待,每次都会启动一个新的
    计时器

    do {
        Timer timer = new Timer();
        //some other stuff
    } while (newUser.isVisible());
    
    这导致数千(数百万?)个
    计时器
    实例被创建,每个实例都有自己的
    线程

  • 从不忙着等待
  • 不要创建数千个
    计时器
    实例
  • 此外,您正在使用not,这意味着最终操作不会在EDT上执行

    如果使用Swing线程策略,则这是一种违规行为。Swing对象(中除外)不是线程安全的,只能从EDT访问


    简言之;这段代码几乎没有错。

    哈哈。我刚刚学到了一些新东西。好吧,那么道希尔是一个大脑错误,我现在明白了。我不太熟悉javax.swing.Timer类。我的编码是基于互联网上的例子。我删除了java.util.Timer并将其替换为javax.swing.Timer,但现在IDE给了我错误。我想我又回到了javadocs。。。不过,谢谢你指出了正确的编码:dhahaops。我刚刚学到了一些新东西。好吧,那么道希尔是一个大脑错误,我现在明白了。我不太熟悉javax.swing.Timer类。我的编码是基于互联网上的例子。我删除了java.util.Timer并将其替换为javax.swing.Timer,但现在IDE给了我错误。我想我又回到了javadocs。。。不过,谢谢你指出了正确的编码:D