2014-07-12 20 views
0

我的程序運行良好,直到我在第二課的JFrame中使用switch語句從同一個包中的第一課打開。我得到了與堆空間有關的內存錯誤..我刪除了那個switch語句仍然發生了同樣的錯誤。當jframe之間沒有鏈接時,它們完美運行。但是當我鏈接它們時,第一幀工作,並單擊提交按鈕,它消失,可能是因爲在其行動中,我已經使用this.dispose,但它不打開第二幀,並在5-10分鐘後,我內存不足錯誤從相同包中的按鈕打開JFrame時出現內存不足錯誤?

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(); 
} 

的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與switch語句由於我得到了錯誤

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

你在上面添加的代碼只顯示你的類(一些方法)的一部分,但我想要得到的幫助,你必須張貼孔代碼。你說了一些你添加的switch語句,但是我不能在你的代碼中的任何地方使用它。 – Patrick

+0

@Patrick我刪除了那個switch語句,希望能夠消除這個錯誤..等等我也會發布這個..我正在使用netbeans。我是否仍需要發佈完整的代碼? – user3819936

+0

@帕特里克再次檢查我的問題。我編輯過! – user3819936

回答

0

我的第一個想法是:

final Sample a = new Sample(); 
SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     a.setVisible(true); 
    } 
}); 
this.dispose(); 

這是一般一個很好的做法,快速處理事件隊列處理線程上的事件,以及稍後在做實際工作。

但是,一個錯誤似乎是代碼使用字段而不是局部變量,似乎在Sample構造函數中使用。那麼Sample是嵌入式類?然後一個this.dispose()不會釋放類本身,只要Sample不釋放它保持JFrame1.this

不確定這是否有幫助,但一些代碼重寫似乎適用。

也可以嘗試

setDefaultCloseOperation(DISPOSE_ON_CLOSE); // Init 
... 
setVisible(false); // Instead of dispose() 
0

當您嘗試將更多數據添加到內存中的堆空間區域時觸發「java.lang.OutOfMemoryError:Java堆空間」錯誤,但此數據的大小大於JVM在Java堆中可容納的大小空間。

在許多情況下,您可以通過在啓動腳本中指定(或增加(如果存在))-Xmx參數來增加堆空間,例如-Xmx1024m。

相關問題