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 :
le linee incriminate sono 63, 64 e 65 a seconda di quale MenuItem si clicchi e corrispondono alle seguenti linee di codice:codice:Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at ProjectApplication.actionPerformed(ProjectApplication.java:64) . . .
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.codice:if(source.equals(Line)) { model.setState("line"); } else if(source.equals(Rect)) { model.setState("rect"); } else if(source.equals(Circle)) { model.setState("circle"); }
Chiunque abbia qualche consiglio da darmi è sicuramente ben accetto! Grazie in anticipo, David.

Rispondi quotando
