Java Probleem

Status
Niet open voor verdere reacties.

Addict Rick

Gebruiker
Lid geworden
20 feb 2009
Berichten
6
Deze vraag is misschien redelijk simpel, maar ik kom er toch niet uit, na een half jaar HBO Informatica.

Ik moet voor een stap van een Java opdracht vliegtuigen en parashutisten op kunnen slaan in een ArrayList. Deze vliegtuigen en parashutisten zijn aangemaakt in een andere klasse.
Deze vliegtuigen en parashutisten moeten worden aangemaakt, in een ArrayList gezet worden, en op het scherm worden weergegeven als ik op het scherm klik. De rechtermuisknop doet zit met parashutisten, de linkermuisknop met vliegtuigen.

Ik heb de code gemaakt, maar nu gebeurt er iets raars.
Als ik op de linkermuisknop of de rechtermuisknop druk, verschijnt er helemaal niets, en ik krijg een NullpointerException van de code waarmee ik iets toevoeg aan een ArrayList. Hoewel, als ik eerst op de linkermuisknop en daarna snel op de rechtermuisknop druk, verschijnt er opeens wél een vliegtuig. Dit vliegtuig doet precies wat hij hoort te doen, maar staat niet in een ArrayList, en deze truuk lukt niet met een parashutist.

Hier staat de code die ik gebruik.

HoofdPaneel
Code:
import javax.swing.*;
import java.awt.*;

public class HoofdPaneel extends JPanel
{
	private VliegtuigenController controller;
	
	public HoofdPaneel()
	{
		setBackground(new Color(153,217,234));
		setLayout(null);
		controller = new VliegtuigenController(this);
		addMouseListener(controller);
	}
	
}

VliegtuigController
Code:
import java.awt.event.*;
import java.util.*;

public class VliegtuigenController extends MouseAdapter
{
	private HoofdPaneel hoofdpaneel;
	private ArrayList<Vliegtuig> lijst1;
	private ArrayList<Parashutist> lijst2;
	
	public VliegtuigenController(HoofdPaneel hoofdpaneel)
	{
		ArrayList<Vliegtuig> lijst1 = new ArrayList<Vliegtuig>();
		ArrayList<Parashutist> lijst2 = new ArrayList<Parashutist>();
		this.hoofdpaneel = hoofdpaneel;
	}
		
	public void mouseClicked(MouseEvent e)
	{
		if(e.isMetaDown())
		{
			Parashutist parashutist = new Parashutist(e.getX(), e.getY());
			ParashutistView view2 = new ParashutistView(parashutist, e.getX(), e.getY());
			new ParashutistController(parashutist, hoofdpaneel, view2);
			lijst2.add(parashutist);
			hoofdpaneel.add(view2);
		}
		else
		{
			Vliegtuig vliegtuig = new Vliegtuig(e.getX(), e.getY());
			VliegtuigView view = new VliegtuigView(vliegtuig, e.getX(), e.getY());
			new VliegtuigController(vliegtuig, view, hoofdpaneel);
			lijst1.add(vliegtuig);
			hoofdpaneel.add(view);
		}
	}
}

Kan iemand mij helpen? Of is er meer informatie nodig?
 
Bump!

Als iemand het antwoord weet, geef alstublieft antwoord, ik heb nog maar tot Donderdag om dit en nog 3 andere stappen af te maken. :(
 
Krijg je foutmeldingen te zien?

Wat is de inhoud van de parashutist en van de vliegtuig class?

Code:
Parashutist parashutist = new Parashutist(e.getX(), e.getY());

het is niet handig om een Class en een variable dezelfde naam te geven met alleen een hoofdletter verschil.
Kan extreem verwarrend worden bij grote programma's :)
 
Laatst bewerkt:
Je vliegtuig controler maakt ook parachutisten aan is dit de bedoeling ? Je hoofdpaneel heeft ook geen parachutist controler..

tevens heb je ergens dit staan:

new ParashutistController(parashutist, hoofdpaneel, view2);

je doet verder niets met deze nieuwe controler, wat zou deze controler moeten doen ?

gr.
 
Krijg je foutmeldingen te zien?

Wat is de inhoud van de parashutist en van de vliegtuig class?

Code:
Parashutist parashutist = new Parashutist(e.getX(), e.getY());

het is niet handig om een Class en een variable dezelfde naam te geven met alleen een hoofdletter verschil.
Kan extreem verwarrend worden bij grote programma's :)

Code:
import java.awt.*;

public class Vliegtuig
{
	private int x, y; // Locatie van het vliegtuig
	private int hoogte, breedte; // Grootte van het vliegtuig
	private Color kleur; // Kleur van het vliegtuig
	private boolean links = false, rechts = true; //Boolean voor de richting van het vliegtuig
	private boolean richting = links;
	private boolean open = false, dicht = true;
	
	//Default-waarden
	public Vliegtuig(int x, int y)
	{
		hoogte = 20;
		breedte = 50;
		this.x = x;
		this.y = y;
	}
	//Veranderingen in Default-waarden
	public Vliegtuig(int x, int y, int hoogte, int breedte, Color kleur)
	{
		this.x = x;
		this.y = y;
		this.hoogte = hoogte;
		this.breedte = breedte;
		this.kleur = kleur;
	}

	//Getters & Setters
	public int getX()
	{
		return x;
	}

	public void setX(int x)
	{
		this.x = x;
	}

	public int getY()
	{
		return y;
	}

	public void setY(int y)
	{
		this.y = y;
	}

	public int getHoogte()
	{
		return hoogte;
	}

	public void setHoogte(int hoogte)
	{
		this.hoogte = hoogte;
	}

	public int getBreedte()
	{
		return breedte;
	}

	public void setBreedte(int breedte)
	{
		this.breedte = breedte;
	}
	
	public void setKleur(Color kleur)
	{
		this.kleur = kleur;
	}
	
	public boolean isRichting()
	{
		return richting;
	}

	public void setRichting(boolean richting)
	{
		this.richting = richting;
	}
	
	public boolean getOpen()
	{
		return open;
	}
	
	public void setOpen(boolean open)
	{
		this.open = open;
	}
	
	public boolean getDicht()
	{
		return dicht;
	}
	
	public void setDicht(boolean dicht)
	{
		this.dicht = dicht;
	}
}

Code:
import java.awt.Color;

public class Parashutist
{
	private int x, y; //Locatie van de parashutist
	private int breedte, hoogte, formaat;  //Grootte van de parahutist
	private Color kleur;  //Kleur van de parashutist
	private boolean VRIJEVAL = true, PARASHUTGEOPEND = false, GELAND = false; //Toestand
	private Vliegtuig vliegtuig;
	
	public Parashutist(int x, int y)
	{
		this.x = x;
		this.y = y;
		kleur = Color.RED;
		hoogte = 20;
		breedte = 5;
	}

	//Getters & Setters
	public int getX()
	{
		return x;
	}

	public void setX(int x)
	{
		this.x = x;
	}

	public int getY()
	{
		return y;
	}

	public void setY(int y)
	{
		this.y = y;
	}

	public int getBreedte()
	{
		return breedte;
	}

	public void setBreedte(int breedte)
	{
		this.breedte = breedte;
	}

	public int getHoogte()
	{
		return hoogte;
	}

	public void setHoogte(int hoogte)
	{
		this.hoogte = hoogte;
	}

	public int getFormaat()
	{
		return formaat;
	}

	public void setFormaat(int formaat)
	{
		this.formaat = formaat;
	}

	public Color getKleur()
	{
		return kleur;
	}

	public void setKleur(Color kleur)
	{
		this.kleur = kleur;
	}
	
	public boolean getVrijeval()
	{
		return VRIJEVAL;
	}

	public void setVrijeval(boolean VRIJEVAL)
	{
		this.VRIJEVAL = VRIJEVAL;
	}
	
	public boolean getGeopend()
	{
		return PARASHUTGEOPEND;
	}

	public void setGeopend(boolean PARASHUTGEOPEND)
	{
		this.PARASHUTGEOPEND = PARASHUTGEOPEND;
	}
	
	public boolean getGeland()
	{
		return GELAND;
	}

	public void setGeland(boolean GELAND)
	{
		this.GELAND = GELAND;
	}
	
	public Vliegtuig getStuk()
	{
		return vliegtuig;
	}

	public void setStuk(Vliegtuig stuk)
	{
		this.vliegtuig = stuk;
	}
	
}

Als het nodig is voeg ik later ook nog de Views van deze klassen toe, op het moment zit ik op een plek waar het internet zeer slecht is.

ParashutistController is trouwens voor een andere stap, daar hoeven jullie nog niet op te letten.
 
Laatst bewerkt:
...en ik krijg een NullpointerException van de code waarmee ik iets toevoeg aan een ArrayList.

Logisch, je hebt je arraylists niet geïnitialiseerd, al denk je van wel ;)

Code:
public VliegtuigenController(HoofdPaneel hoofdpaneel)	{
		ArrayList<Vliegtuig> lijst1 = new ArrayList<Vliegtuig>();
		ArrayList<Parashutist> lijst2 = new ArrayList<Parashutist>();
		...
Hiermee maak je twee lokale variabelen aan, lijst1 en lijst2. In mouseClicked maak je gebruik van twee klassevariabelen.

Er wordt een NullPointerException gegooid nog voor je iets aan hoofdpaneel kan toevoegen, hoe je precies een vliegtuig te zien kreeg weet'k niet onmiddellijk :). 'Fin, los dit even op - als je nog altijd fouten krijgt en er niet uitraakt graag ook de Views posten.
 
Laatst bewerkt:
Okee, volgens mij ben ik er eindelijk uit gekomen, hoewel ik nu binnen 2 dagen nog 3 stappen moet maken om een voldoende te halen...

Hoe dan ook, heel erg bedankt voor de hulp, en ik zal waarschijnlijk weer in dit topic posten als het weer ergens verkeerd loopt. :)



EDIT: Ja, daar ben ik weer, met een kleine vraag.
Voor een andere stap in mijn programma moet ik ervoor zorgen dat een actie uitgevoerd wordt als de applicatie opstart, en als de applicatie afsluit.
Hoe doe ik dit?
 
Laatst bewerkt:
Voor een andere stap in mijn programma moet ik ervoor zorgen dat een actie uitgevoerd wordt als de applicatie opstart, en als de applicatie afsluit.
Hoe doe ik dit?

Hangt ervan af wat de actie is en wanneer die precies moet gebeuren. Je programma start met de main methode (public static void main (String[] args)), maar misschien is het een actie die met de GUI te maken heeft en zal die dus na aanmaak daarvan moeten gebeuren, misschien in de constructor van je JFrame of wat je ook gebruikt.

Voor het afsluiten ga ik er opnieuw even van uit dat je een JFrame gebruikt, dan kan je het volgende toevoegen bij de initialisatie van je frame:
Code:
addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent we){
        // je actie hier ...
        System.exit(0);
      }
 
Als de applicatie afsluit, moeten de vliegtuigen en parashutisten die ik al heb neergezet opgeslagen worden. Ik moet dus waarschijnlijk die Arrays laten saven in een bestand. Gelukkig weet ik wel hoe dát moet. :p

Maarja, die windowClosing methode kan ik eventueel wel proberen, maar is er ook zoeits als een windowOpening methode?
 
Als de applicatie afsluit, moeten de vliegtuigen en parashutisten die ik al heb neergezet opgeslagen worden. Ik moet dus waarschijnlijk die Arrays laten saven in een bestand. Gelukkig weet ik wel hoe dát moet. :p

Maarja, die windowClosing methode kan ik eventueel wel proberen, maar is er ook zoeits als een windowOpening methode?

Hey addict Rick

Kan je ook die opdracht op site zetten want ik heb die opdracht ook heel dringend nodig?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan