我的程序运行得很好,直到我使用了JFrame中的第二类开关语句,以便从同一包的第一类打开。我忘记了记忆错误..。与堆空间相关。我删除了仍然发生相同错误的开关语句。当jframes之间没有linkin时,它们运行得非常完美。但是当我链接到它们时,第一帧就可以工作了,单击submit按钮它就消失了,可能是因为在它的操作中我使用了this.dispose,但是它没有打开第二帧,在5-10分钟后我就从内存错误中消失了。
Class1(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();
}Class2(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");
} 带有开关语句的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();
} 发布于 2014-07-14 09:45:18
我的第一个想法是:
final Sample a = new Sample();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
a.setVisible(true);
}
});
this.dispose();这通常是一个很好的实践,在事件队列处理线程上快速处理一个事件,然后再做真正的工作。
但是,一个错误似乎是代码使用字段而不是局部变量,并且似乎在示例构造函数中使用。那么样本是一个嵌入式类吗?这样,this.dispose()就不会释放类本身,只要没有释放样本,它就会维护一个JFrame1.this。
不确定这是否有帮助,但对代码进行重新编写似乎是可取的。
也试着
setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Init
...
setVisible(false); // Instead of dispose()发布于 2014-07-14 09:24:21
当您试图将更多数据添加到内存中的堆空间区域时,会触发“java.lang.OutOfMemoryError:Java堆空间”错误,但是该数据的大小要大于JVM在Java堆空间中所能容纳的大小。
在许多情况下,您可以通过在启动脚本中指定(或增加) -Xmx参数来增加堆空间,例如-Xmx1024m。
https://stackoverflow.com/questions/24710551
复制相似问题