我的程序运行正常,直到我在第二类的JFrame中使用switch语句从同一个包中的第一个类打开。我的内存错误..与堆空间有关。我删除了那个switch语句仍然发生了同样的错误。当jframe之间没有链接时,它们运行得很好。但当我链接它们,第一帧工作,点击提交按钮,它消失了,可能是因为在它的动作我已经使用了这个。但它没有打开第二帧,并在5-10分钟后我出现内存错误
1类(JFrame1)
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
qualification = (String)degree.getSelectedItem( );
contact_num= Integer.parseInt(num.getText());
String xyz= (String)d.getSelectedItem();
date=Integer.parseInt(xyz);
xyz= (String)m.getSelectedItem();
month=Integer.parseInt(xyz);
year=Integer.parseInt(y.getText());
street= (String)(strt.getText());
name=(String)nme.getText();
email= (String)e_mail.getText();
state= (String)stt.getText();
city= (String)cty.getText();
gender= (String)sex.getSelectedItem();
Sample a=new Sample();
a.setVisible(true);
this.dispose();
}
等级2(JFrame2)
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.print("ab");
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.print("b");
}
带有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();
}
答案 0 :(得分:0)
当您尝试将更多数据添加到内存中的堆空间区域时会触发“java.lang.OutOfMemoryError:Java堆空间”错误,但此数据的大小大于JVM在Java堆中可容纳的大小空间。
在许多情况下,您可以通过在启动脚本中指定(或增加,如果存在)-Xmx参数来增加堆空间,例如-Xmx1024m。
答案 1 :(得分:0)
我的第一个想法是:
final Sample a = new Sample();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
a.setVisible(true);
}
});
this.dispose();
这通常是一种很好的做法,可以快速处理事件队列处理线程上的事件,并稍后执行实际工作。
然而,一个错误似乎是代码使用 fields 而不是局部变量,并且似乎在Sample构造函数中使用。那么Sample是一个嵌入式类?然后this.dispose()
不会释放类本身,只要未释放Sample,它就会保留JFrame1.this
。
不确定这是否有帮助,但是一些代码重写似乎是合适的。
也可以尝试
setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Init
...
setVisible(false); // Instead of dispose()