De fout is inderdaad de NullPointerException omdat getGraphics() niet werkt in de init..
Ik ben alleen helaas niet in staat een oplossing te bedenken.
Wat betreft het school gebeuren. Voor zover mensen het proberen komen ze er ook niet uit. Zelfs de docent wist hier niet zo gauw een oplossing voor (Kan aan de docent liggen natuurlijk... )
Anyways. Hier is een stukje code uit m'n applet. Deze roept de eigenlijke cardlayout aan.
Het is best veel maar als iemand hierna zou willen kijken en tips heeft hoe ik de dubble buffer op mijn paneel/scherm kan gebruiken. Ik weet onderhand waar het fout gaat (ben er een dag aan bezig geweest) Maar ik kom zelf niet tot een handige oplossing.
---------------------------------------------------------]
package game;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Four_Play extends Applet {
private CardLayout cardlayout;
protected Paneel paneel;
protected String cat1[], cat2[], cat3[], catOV[];
protected Reader r1, r2, r3, rOV;
protected Vraag vraagjes[], vragen[][];
protected OpenVraag ovragen[];
private int i, a, b;
private Image achter, gender,wiet, heart, plaatjes[];
private MediaTracker plaatje;
private Applet applet;
public void init()
{
plaatje = new MediaTracker(this);
achter = getImage( getCodeBase(), "sherm3.plt" );
gender = getImage( getCodeBase(), "gender.plt" );
wiet = getImage( getCodeBase(), "wiet.plt" );
heart = getImage( getCodeBase(), "heart.plt" );
plaatje.addImage(achter,0);
plaatje.addImage(gender,1);
plaatje.addImage(wiet,2);
plaatje.addImage(heart,3);
try{
plaatje.waitForAll(5000);
}
catch( InterruptedException e){}
plaatjes = new Image[4];
plaatjes[0] = achter;
plaatjes[1] = gender;
plaatjes[2] = wiet;
plaatjes[3] = heart;
vraagjes = new Vraag[20];
vragen = new Vraag[3][20];
ovragen = new OpenVraag[20];
cat1 = new String[20];
cat2 = new String[20];
cat3 = new String[20];
catOV = new String[20];
arrayCreator();
r1 = new Reader(cat1, 0);
r2 = new Reader(cat2, 0);
r3 = new Reader(cat3, 0);
vraagjes = r1.toArray();
i =0;
createVragen();
vraagjes = r2.toArray();
i =1;
createVragen();
vraagjes = r3.toArray();
i =2;
createVragen();
rOV = new Reader(catOV,1);
ovragen = rOV.toArrayOV();
cardlayout = new CardLayout();// optioneel
setLayout( cardlayout );
paneel = new Paneel( cardlayout,this, vragen, ovragen, plaatjes);
add("paneel", paneel);
}
-----------------------------------------------------------------------------
Hieronder een stukje van de constructor + paint voor het paneel/scherm.
-------------------------------------------------------------------------------
package game;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
class Paneel extends Panel
{
private CardLayout cardlayout;
private Applet applet;
private Graphics g, gB;
private Button knopV, knopA;
private String regel;
private Vraag vragen[][], vraag;
private OpenVraag ovragen[], ovraag;
private int speler, i, c, cp, vsoort;
private Reader r1;
private Image plaatjes[] /*, buffer*/;
private TextArea infoVeld, vraag1, vraag2, sp1, sp2;
private TextField bSp1, bSp2;
private double ant, vers1, vers2;
// de presentator onderdelen
private int x0 = 285, y0 = 15;
private Mond mondje;
private Button wenkbrauwKnop;
private Wenkbrauw wenkbrauwLinks, wenkbrauwRechts;
private Oog oogLinks, oogRechts;
public Paneel(CardLayout cardlayout,Applet applet, Vraag vragen[][], OpenVraag ovragen[], Image plaatjes[])
{
this.applet = applet;
this.cardlayout = cardlayout;
this.vragen = vragen;
this.ovragen = ovragen;
this.plaatjes = plaatjes;
//De presentator settings
wenkbrauwKnop = new Button( "Wenkbrauwen bewegen" );
wenkbrauwKnop.addActionListener( new WenkbrauwKnopHandler() );
wenkbrauwKnop.setBounds(10,50,100,30);
add( wenkbrauwKnop );
setLayout( null );
setBackground( Color.black);
infoVeld = new TextArea("Druk op de vraag knop om het spel te beginnen. De eerste vraag is een percentage vraag om te bepalen welke speler begint.", 10, 50, TextArea.SCROLLBARS_NONE);
infoVeld.setBackground(Color.black);
infoVeld.setForeground( Color.white );
infoVeld.setBounds(215,176,318,170);
vraag1 = new TextArea(" ", 10, 5, TextArea.SCROLLBARS_NONE);
vraag1.setBackground(Color.black);
vraag1.setForeground( Color.white );
vraag1.setBounds(25,15,229,117);
vraag2 = new TextArea(" ", 10, 5, TextArea.SCROLLBARS_NONE);
vraag2.setBackground(Color.black);
vraag2.setForeground( Color.white );
vraag2.setBounds(497,15,227,117);
sp1 = new TextArea(" ", 12, 5, TextArea.SCROLLBARS_NONE);
sp1.setBackground(Color.black);
sp1.setForeground( Color.white );
sp1.setBounds(25,410,262,106);
sp2 = new TextArea(" ", 12, 5, TextArea.SCROLLBARS_NONE);
sp2.setBackground(Color.black);
sp2.setForeground( Color.white );
sp2.setBounds(463,410,262,106);
bSp1 = new TextField("0");
bSp1.setBounds(125,132,30,20);
bSp1.setVisible(false);
bSp2 = new TextField("0");
bSp2.setBounds(537,132,30,20);
bSp2.setVisible(false);
knopV = new Button("Vraag");
knopV.addActionListener(new KnopHandler());
knopV.setBounds(335,450,100,30);
knopA = new Button("Antwoord");
knopA.addActionListener(new KnopHandler());
knopA.setBounds(335,450,100,30);
add(infoVeld);
add(vraag1);
add(vraag2);
add(sp1);
add(sp2);
add(bSp1);
add(bSp2);
add(knopV);
add(knopA);
speler = 0;
regel =" ";
i = 0;
cp = 1;
}
public void paint( Graphics g ){
g.drawImage(plaatjes[0],0,0,750,530,this);
g.drawImage(plaatjes[cp],615,185,100,100,this);
oogLinks = new Oog( getGraphics(), Color.blue, Color.black, x0+45, y0+20, 30, 30, Color.black, x0+59, y0+34, 3, 3 );
oogRechts = new Oog( getGraphics(), Color.blue, Color.black, x0+105, y0+20, 30, 30, Color.black, x0+119, y0+34, 3, 3 );
oogLinks.start();
oogRechts.start();
wenkbrauwLinks = new Wenkbrauw( getGraphics(), Color.yellow, x0+40, y0+15, 40, 10, 0, 180 );
wenkbrauwRechts = new Wenkbrauw( getGraphics(), Color.yellow, x0+100, y0+15, 40, 10, 0, 180 );
wenkbrauwLinks.teken(g, Color.yellow );
wenkbrauwRechts.teken(g, Color.yellow );
mondje = new Mond( getGraphics(), Color.red, x0+45, y0+90, 90, 10 );
mondje.teken(g, Color.red);
//g.drawImage(buffer,0,0, this);
//gB.setColor( Color.black );
//gB.fillRect(0,0,790,550);
}