2015-07-23 6 views
-1

Я добавил несколько пунктов меню в свою панель меню в Swing. Когда я запускаю программу, в строке меню не отображается JMenuItems, а вместо этого вызывается NullPointerException.jMenuBar не показывает какие-либо из его jmenuitems в swing

Когда я создаю меню в AWT, он работает отлично. Я не добавил никаких функций в эту программу. Я использую NetBeans и просто перетаскиваю эти компоненты Swing в свою панель. пожалуйста помоги!

public class test extends javax.swing.JFrame { 

/** Creates new form test */ 
public test() { 
    initComponents(); 
} 

/** This method is called from within the constructor to 
* initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is 
* always regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    jPanel1 = new javax.swing.JPanel(); 
    jMenuBar1 = new javax.swing.JMenuBar(); 
    jMenu1 = new javax.swing.JMenu(); 
    jMenuItem1 = new javax.swing.JMenuItem(); 
    jMenu2 = new javax.swing.JMenu(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    setName("Form"); // NOI18N 

    jPanel1.setName("jPanel1"); // NOI18N 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 400, Short.MAX_VALUE) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 279, Short.MAX_VALUE) 
    ); 

    jMenuBar1.setName("jMenuBar1"); // NOI18N 

    org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(flupertech.FlupertechApp.class).getContext().getResourceMap(test.class); 
    jMenu1.setText(resourceMap.getString("jMenu1.text")); // NOI18N 
    jMenu1.setName("jMenu1"); // NOI18N 

    jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N 
    jMenuItem1.setName("jMenuItem1"); // NOI18N 
    jMenu1.add(jMenuItem1); 

    jMenuBar1.add(jMenu1); 

    jMenu2.setText(resourceMap.getString("jMenu2.text")); // NOI18N 
    jMenu2.setName("jMenu2"); // NOI18N 
    jMenuBar1.add(jMenu2); 

    setJMenuBar(jMenuBar1); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 

    pack(); 
}// </editor-fold> 

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(test.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new test().setVisible(true); 
     } 
    }); 
} 
// Variables declaration - do not modify 
private javax.swing.JMenu jMenu1; 
private javax.swing.JMenu jMenu2; 
private javax.swing.JMenuBar jMenuBar1; 
private javax.swing.JMenuItem jMenuItem1; 
private javax.swing.JPanel jPanel1; 
// End of variables declaration 
} 

ответ

1

Источник ошибки является то, что Ressource загрузка не работает:

org.jdesktop.application.ResourceMap resourceMap = org.jdesktop 
    .application.Application 
    .getInstance(flupertech.FlupertechApp.class).getContext() 
    .getResourceMap(test.class); 
jMenu1.setText(resourceMap.getString("jMenu1.text")); // NOI18N 
jMenu1.setName("jMenu1"); // NOI18N 

jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N 
jMenuItem1.setName("jMenuItem1"); // NOI18N 
jMenu1.add(jMenuItem1); 

jMenuBar1.add(jMenu1); 

jMenu2.setText(resourceMap.getString("jMenu2.text")); // NOI18N 

Если я изменить его на:

jMenu1.setText("b"); // NOI18N 
jMenu1.setName("jMenu1"); // NOI18N 

jMenuItem1.setText("c"); // NOI18N 
jMenuItem1.setName("jMenuItem1"); // NOI18N 
jMenu1.add(jMenuItem1); 

jMenuBar1.add(jMenu1); 

jMenu2.setText("a"); // NOI18N 
jMenu2.setName("jMenu2"); // NOI18N 
jMenuBar1.add(jMenu2); 

Он хорошо работает, вы можете выяснить, почему ваш ResourceMap или один из его методов возвращают значение null.

+0

ОК, я понимаю вашу точку зрения. но как я могу проверить свойства ResourceMap? –

+0

Просто установите точку прерывания в строке, затем проверьте с помощью отладчика, что равно null. – m4mbax

+0

спасибо. отладки. –

0

Это работает сейчас. Просто нужно создать объект. Поэтому я создал новый jForm и назвал его с помощью jButton. Таким образом, он передает объект этой формы, и теперь он отлично работает.