Salve a tutti è da poco che sto programmando in Java e voglio proporvi questo problema in cui sono capitato e che non riesco a risolvere:

codice:
import javax.swing.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;  

public class ProjectApplication extends JFrame implements ActionListener {  	 	
private JMenuItem New , Open , Save , Close , Line , Rect, Circle; 	
private Model model; 	
private View view; 	
private Controller controller; 	 	

public ProjectApplication() { 		
Model model = new Model(); 	    
View view = new View(model); 	    
Controller controller = new Controller(model , view); 	    
initMenu(); 	    
add(view); 		
pack(); 		
setDefaultCloseOperation(EXIT_ON_CLOSE); 		
setVisible(true); 	} 	 	

public void initMenu() { 		
JMenuBar menuBar = new JMenuBar(); 		
JMenu drawMenu = new JMenu("Draw"); 		 		
Line = new JMenuItem("Line"); 		
Line.addActionListener(this); 		
drawMenu.add(Line); 		
Rect = new JMenuItem("Rect"); 		
Rect.addActionListener(this); 		
drawMenu.add(Rect); 		
Circle = new JMenuItem("Circle"); 		
Circle.addActionListener(this); 		
drawMenu.add(Circle); 			
menuBar.add(drawMenu); 		
setJMenuBar(menuBar); 	 	     
} 	  	

public void actionPerformed(ActionEvent evt){ 		
Object source = evt.getSource(); 		
if(source.equals(Line)) { model.setState("line"); } 		
else if(source.equals(Rect)) { model.setState("rect"); } 		
else if(source.equals(Circle)) { model.setState("circle"); } 	
} 	 	 	

public static void main(String[] args){ 		
new ProjectApplication(); 	
} 
}

Ok, il programma compila senza errori e va in esecuzione, quando però clicco su una qualsiasi delle voci del menu (Line , Rect o Circle) ricevo l'errore :

codice:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 	
at ProjectApplication.actionPerformed(ProjectApplication.java:64)
.
.
.
le linee incriminate sono 63, 64 e 65 a seconda di quale MenuItem si clicchi e corrispondono alle seguenti linee di codice:

codice:
if(source.equals(Line)) { model.setState("line"); } 		
else if(source.equals(Rect)) { model.setState("rect"); } 		
else if(source.equals(Circle)) { model.setState("circle"); }
Se io però chiamo il metodo setState("qualsiasi stringa"); di model in altre classi in cui model è istanziato allo stesso modo, il metodo funziona perfettamente.

Chiunque abbia qualche consiglio da darmi è sicuramente ben accetto! Grazie in anticipo, David.