Wywolanie obiektu innej klasy w konstruktorze

0
package app1;

import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

class Menu implements ActionListener
{
	private JMenuBar menuBar;
	private String nFileMenu[] = {"Nowy", "Otworz", "Zapisz", "Zapisz jako","Zamknij"};
	private JMenuItem[] iFileMenu;
	private String[] nEditMenu =  {"Cofnij","Wytnij","Kopiuj","Wklej"};
	private JMenuItem[] iEditMenu;
	private String[] nHelpMenu = {"Pomoc", "O programie"};
	private JMenuItem[] iHelpMenu;
	private JMenu fileMenu;
	private JMenu editMenu;
	private JMenu helpMenu;
	public Menu()
	{
		fileMenu = new JMenu("Plik");
		editMenu = new JMenu("Edycja");
		helpMenu = new JMenu("Pomoc");
		iFileMenu[5] = new JMenuItem();
		iEditMenu[4] = new JMenuItem();
		iHelpMenu[2] = new JMenuItem();
		for (int i = 0; i <= 4; i++)
		{
			iFileMenu[i] = new JMenuItem(nFileMenu[i]);
			fileMenu.add(iFileMenu[i]);
		}
		for (int i = 0; i <= 3; i++)
		{
			iEditMenu[i] = new JMenuItem(nEditMenu[i]);
			editMenu.add(iEditMenu[i]);
		}
		for (int i = 0; i < 2; i++)
		{
			iHelpMenu[i] = new JMenuItem(nHelpMenu[i]);
			helpMenu.add(iHelpMenu[i]);
		}
		menuBar.add(fileMenu);
		menuBar.add(editMenu);
		menuBar.add(helpMenu);
	}

	public JMenuBar getMenuBar() {
		return menuBar;
	}

	public void actionPerformed(ActionEvent ae) {
		
		
	}
	
}

public class Application extends JFrame {
	
	private static final long serialVersionUID = 5790815098739799108L;
	private JPanel contentPane;
	public Application() throws HeadlessException {
		super();
		this.setTitle("Aplikacja v1.0");
		this.setSize(300,300);
		this.setLocationRelativeTo(null);
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we){
				dispose();
				System.exit(0);
			}
		});
		contentPane = (JPanel)this.getContentPane();
		Menu menu = new Menu();
		contentPane.add(menu.getMenuBar());
		
	}


	public static void main(String[] args) {
		
		Application application = new Application();
		application.setVisible(true);

	}

}

Mam oto taki kod. Chce w klasie Application utworzyc obiekt menu, który stworzy mi menu do tej ramki.
Konstruktor klasy Menu wywołuje się automatem jak stworzę jego obiekt tak? No ale jak utworze obiekt klasy i wrzuce go do konstruktora klasy Appliaction to jest warning (eclipse) ze nie zostanie nigdy odczytany. Więc utworzylem geta do menubara i odwołałem sie do niego wrzucając do JPanelu ale przy kompilacji mam błąd

 Exception in thread "main" java.lang.NullPointerException
	at app1.Menu.<init>(Application.java:32)
	at app1.Application.<init>(Application.java:81)
	at app1.Application.main(Application.java:88)

P.S dopiero zaczynam sie bawic z java

0

Problem w tym, że menuBar nigdzie nie jest inicjalizowany.

0

Fakt :P
Dodałem w konstruktorze Menu

menuBar = new JMenuBar();

I dalej ten sam błąd...

0

iFileMenu też nie jest inicjalizowane i to tego tyczy się wyjątek.

0

private JMenuItem[] iFileMenu;
iFileMenu[5] = new JMenuItem();

zle to jest wtedy? Jezeli tak to jak poprawnie jest? :>

0
private JMenuItem[] iFileMenu = new JMenuItem[wielkoscTablicy];
iFileMenu[5] = new JMenuItem();
0

Dalej ten sam błąd jest...
// edit
Dobra działa
Wielkie dzieki :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1