Java 在同一软件包中打开JFrame from按钮时出现内存不足错误?
我的程序运行得很好,直到我在第二类的JFrame中使用了一个switch语句,并在同一个包中从第一类打开。我的内存不足,出现了一个错误。。与堆空间相关。我删除了switch语句,但仍然发生了相同的错误。当jframes之间没有链接时,它们运行得非常完美。但当我链接它们时,第一帧起作用,单击“提交”按钮,它就会消失,可能是因为在它的操作中我使用了这个。dispose,但它没有打开第二帧,5-10分钟后,我就会出现内存不足错误 一级(J1) 类别2(J2) 带有switch语句的Class2代码,因此我得到了那个错误Java 在同一软件包中打开JFrame from按钮时出现内存不足错误?,java,swing,jframe,out-of-memory,jbutton,Java,Swing,Jframe,Out Of Memory,Jbutton,我的程序运行得很好,直到我在第二类的JFrame中使用了一个switch语句,并在同一个包中从第一类打开。我的内存不足,出现了一个错误。。与堆空间相关。我删除了switch语句,但仍然发生了相同的错误。当jframes之间没有链接时,它们运行得非常完美。但当我链接它们时,第一帧起作用,单击“提交”按钮,它就会消失,可能是因为在它的操作中我使用了这个。dispose,但它没有打开第二帧,5-10分钟后,我就会出现内存不足错误 一级(J1) 类别2(J2) 带有switch语句的Class2代码,因
public Qualification abc=new Qualification();
Sample aa= new Sample();
public String s;
public void open_sample()
{
this.setVisible(true);
switch(abc.qualification)
{
case "BE":
BE1 a=new BE1();
break;
case "10th/12th":
C101 b=new C101();
b.setVisible(true);
break;
case "MBA":
MBA1 c=new MBA1();
c.setVisible(true);
break;
case "CA":
CA1 x=new CA1();
x.setVisible(true);
break;
default:
}
}
private void sa1ActionPerformed(java.awt.event.ActionEvent evt) { s= evt.getActionCommand();
open_sample();
}
private void sa4ActionPerformed(java.awt.event.ActionEvent evt) {
s= evt.getActionCommand();
open_sample();}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.print("hello");
}
private void sa3ActionPerformed(java.awt.event.ActionEvent evt) {
s= evt.getActionCommand();
open_sample();
}
private void sa2ActionPerformed(java.awt.event.ActionEvent evt) {
s = evt.getActionCommand();
open_sample();
}
当您尝试向内存中的堆空间区域添加更多数据时,会触发“java.lang.OutOfMemoryError:java堆空间”错误,但该数据的大小大于JVM在java堆空间中可以容纳的大小 在许多情况下,您可以通过在启动脚本中指定(或增加,如果有)-Xmx参数来增加堆空间,例如-Xmx1024m 我的第一个想法是:
final Sample a = new Sample();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
a.setVisible(true);
}
});
this.dispose();
这通常是一个很好的实践,在事件队列处理线程上快速处理事件,稍后再做真正的工作
然而,有一个错误似乎是代码使用了字段而不是局部变量,并且似乎是在示例构造函数中使用的。所以Sample是一个嵌入式类?然后,this.dispose()
将不会释放类本身,只要Sample未被释放,它将维护一个JFrame1.this
不确定这是否有帮助,但稍微重写一下代码似乎是合适的
也尝试
setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Init
...
setVisible(false); // Instead of dispose()
上面添加的代码只显示了类的一部分(一些方法),但是如果您想获得帮助,必须发布代码。你说了一些关于你添加的switch语句的事情,但我不能在上面代码的任何地方这样做。@Patrick我删除了那个switch语句,希望能消除那个错误。。等等,我也会把它贴出来。。我正在使用netbeans。我还需要发布整个代码吗?@Patrick再次查看我的问题。我已经编辑过了@user3819936:似乎有一些实现缺陷,但从另一方面来说,请看一看。如果没有相关的代码,很难说在执行程序时,已经引用的
JFrame
s到底在做什么。在管理多个JFrame
s@nIcEcOw好的,我会读到的,thanx:)
final Sample a = new Sample();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
a.setVisible(true);
}
});
this.dispose();
setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Init
...
setVisible(false); // Instead of dispose()