2011-05-07 37 views
1

我有一個程序在Eclipse中沒有顯示任何錯誤,但是每當我點擊運行按鈕時,什麼都不會發生。我在下面附加的編譯器控制檯中獲取了代碼行。即使沒有任何錯誤,編譯器爲什麼不運行該程序?

import java.awt.*; 
import javax.swing.*; 

import java.awt.event.*; 

public class Transaction extends JFrame { 

private static final long serialVersionUID = 1L; 
JFrame frame = new JFrame("Bank Account - S Standridge"); 
JMenuBar MenuBar; 
JMenu File = new JMenu("File"); 
JMenu Edit = new JMenu("Edit"); 
JMenu About = new JMenu("About"); 
JMenuItem Transaction = new JMenuItem("Transaction"); 
JMenuItem Summary = new JMenuItem("Summary"); 
JMenuItem Exit = new JMenuItem("Exit"); 
private JPanel MenuPanel; 
private JPanel TransactionPanel; 
private JPanel ButtonPanel; 
private JButton calcButton;  
private JButton exitButton; 
private JMenuItem SummaryMenuItem; 
private JMenuItem AboutMenuItem; 
private JMenuItem ExitMenuItem; 

public Transaction() { 
    setTitle("Bank Account - S Standridge"); 

    MenuPanel = new JPanel(); 
    TransactionPanel = new JPanel(); 
    ButtonPanel = new JPanel(); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    setLayout(new BorderLayout()); 

    MenuPanel();   
    TransactionPanel(); 
    BuildButtonPanel();  

    add(MenuPanel, BorderLayout.NORTH); 
    add(TransactionPanel, BorderLayout.WEST); 
    add(ButtonPanel, BorderLayout.SOUTH); 

    pack(); 
    setVisible(true); 
} 

private void MenuPanel() { 

    MenuBar = new JMenuBar(); 

    frame.setJMenuBar(MenuBar); 
    frame.setVisible(true); 

    MenuBar.add(File); 
    MenuBar.add(Edit); 
    MenuBar.add(About); 

    File.add(Transaction); 
    File.add(SummaryMenuItem); 
    File.add(ExitMenuItem); 

    SummaryMenuItem.addActionListener(new SummaryMenuListener()); 
    AboutMenuItem.addActionListener(new AboutMenuListener()); 
} 

private void BuildButtonPanel() { 

    // Create a panel for the buttons. 
     ButtonPanel = new JPanel(); 

     // Create the buttons. 
     calcButton = new JButton("Calculate"); 
     exitButton = new JButton("Exit"); 

     // Register the action listeners. 
     calcButton.addActionListener(new CalcButtonListener()); 
     exitButton.addActionListener(new ExitButtonListener()); 

     // Add the buttons to the button panel. 
     ButtonPanel.add(calcButton); 
     ButtonPanel.add(exitButton); 

} 

private void TransactionPanel() 
{ 
    setLayout(new FlowLayout()); 

    JRadioButton b1 = new JRadioButton("A"); 
    // b1.addActionListener(this); 
    add(b1); 

    JRadioButton b2 = new JRadioButton("B"); 
    // b2.addActionListener(this); 
    add(b2); 



    ButtonGroup bg = new ButtonGroup(); 
    bg.add(b1); 
    bg.add(b2); 


    JTextField tf = new JTextField(5); 
    add(tf); 
    } 

} 

class CalcButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
    { 

    } 
} 

class SummaryMenuListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 

     } 
    } 

class ExitButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      System.exit(0); 
     } 
    } 

class AboutMenuListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
     // Displays Message Box 
     } 
    } 

這個下一個塊是我嘗試運行該程序時用於Eclipse的控制檯輸出。

java.lang.reflect.InvocationTargetException 
IWAV0052E Invocation Target Exception creating Transaction 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher$1.run(JFCLauncher.java:59) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$000(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
Caused by: java.lang.NullPointerException 
at java.awt.Container.addImpl(Unknown Source) 
at java.awt.Container.add(Unknown Source) 
at javax.swing.JPopupMenu.add(Unknown Source) 
at javax.swing.JMenu.add(Unknown Source) 
at Transaction.MenuPanel(Transaction.java:61) 
at Transaction.<init>(Transaction.java:37) 
... 19 more 
+10

讓所有的變量名以大寫字母開頭是非常令人困惑的。我會建議遵循camelCase約定。 – Falmarri 2011-05-07 07:14:40

+3

另外,具有名稱與字段名稱('MenuPanel')完全相同的方法也會變得混淆。大多數方法名稱應該包含一些動詞。 – 2011-05-07 08:01:19

+0

程序很容易被_compilable_而不是_runnable_。例如考慮「System.out.print(1/0)」。 – 2011-05-07 08:57:25

回答

6

您在Transaction.javaNullPointerException在行61。

我懷疑你需要在做File.add(SummaryMenuItem);之前初始化SummaryMenuItem

+0

我已將MenuPanel對象名稱更改爲「mp」,以便爲對象和方法和構造函數指定不同的名稱。我還將代碼添加到上面添加動作偵聽器的位置,並將其添加到文件菜單中。我還在構建菜單欄的menuPanel方法之前添加了一個摘要方法。但是,這些都沒有幫助。它仍然編譯,但不會運行。我在控制檯中遇到的錯誤仍然存​​在。 「由...引起」的行是: 引起:java.lang.NullPointerException \t在Transaction.menuPanel(Transaction.java:64) \t at Transaction。 (Transaction.java:37) – Ryujin89 2011-05-08 08:51:08

+1

似乎是一個好開始。由於這是一個很大的改變,我建議你在新的問題中發佈代碼。鏈接到這個問題,並說這是一個後續問題。在這裏添加一個鏈接,我會看看你的新問題。 – aioobe 2011-05-08 08:55:18

+0

「新」問題在:http://stackoverflow.com/questions/5926579/why-does-my-program-compile-but-it-not-run – Ryujin89 2011-05-08 09:18:06

相關問題