java.lang.OutOfMemoryError无法创建新的本机线程
(在NetBeans/Java中工作)我使用一个按钮从外部源中检索值,虽然存在一些小问题,但一切都很好,然后我开始遇到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() 你有一
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