首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一包中打开JFrame按钮时内存不足?

在同一包中打开JFrame按钮时内存不足?
EN

Stack Overflow用户
提问于 2014-07-12 07:05:46
回答 2查看 159关注 0票数 0

我的程序运行得很好,直到我使用了JFrame中的第二类开关语句,以便从同一包的第一类打开。我忘记了记忆错误..。与堆空间相关。我删除了仍然发生相同错误的开关语句。当jframes之间没有linkin时,它们运行得非常完美。但是当我链接到它们时,第一帧就可以工作了,单击submit按钮它就消失了,可能是因为在它的操作中我使用了this.dispose,但是它没有打开第二帧,在5-10分钟后我就从内存错误中消失了。

Class1(JFrame1)

代码语言:javascript
复制
    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)

代码语言:javascript
复制
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代码,因此我得到了这个错误

代码语言:javascript
复制
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();
    } 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-14 09:45:18

我的第一个想法是:

代码语言:javascript
复制
final Sample a = new Sample();
SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        a.setVisible(true);
    }
});
this.dispose();

这通常是一个很好的实践,在事件队列处理线程上快速处理一个事件,然后再做真正的工作。

但是,一个错误似乎是代码使用字段而不是局部变量,并且似乎在示例构造函数中使用。那么样本是一个嵌入式类吗?这样,this.dispose()就不会释放类本身,只要没有释放样本,它就会维护一个JFrame1.this

不确定这是否有帮助,但对代码进行重新编写似乎是可取的。

也试着

代码语言:javascript
复制
setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Init
...
setVisible(false); // Instead of dispose()
票数 0
EN

Stack Overflow用户

发布于 2014-07-14 09:24:21

当您试图将更多数据添加到内存中的堆空间区域时,会触发“java.lang.OutOfMemoryError:Java堆空间”错误,但是该数据的大小要大于JVM在Java堆空间中所能容纳的大小。

在许多情况下,您可以通过在启动脚本中指定(或增加) -Xmx参数来增加堆空间,例如-Xmx1024m。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24710551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档