Applet jako aplikacja

0

Witam, mam problem z przerobieniem appletu na aplikację. Gdy próbuję uruchomić poniższy kod dostaje błąd umieszczony poniżej. Szukałem wiele w internecie, jednak nie znalazłem rozwiązania. Gdyby ktoś powiedział mi co robię nie tak i co muszę zmienić byłbym wdzięczny :)

Błąd:
**Exception in thread "main" java.lang.NullPointerException
at pr.SokobanView.<init>(SokobanView.java:64)
at pr.SokobanView.main(SokobanView.java:20)
**
Dotyczy linii z bg=bufor.getGraphics();

package pr;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Timer;

import javax.swing.JFrame;


public class SokobanView extends Frame   {

public static void main(String args[])
{
	System.out.println("tak");
	SokobanView sokoban = new SokobanView();
	sokoban.setSize(540,400);
	sokoban.setBackground(Color.LIGHT_GRAY);
}
int f=0;
int w=0;
int sizex = 14*40;
int sizey = 10*40;
static SokobanView applet;

SokobanModel ViewModel = SokobanModel.getInstance();
SokobanController ViewController = new SokobanController();
Timer timer = new Timer();
Image bufor;
Graphics bg;
static int stan = 1;

Image box;
Image floor;
Image face;
Image exit;
Image wall;



public int getSizeY()
{
	return sizey;
}

public int getSizeX()
{
	return sizex;
}



public SokobanView()
{
	
	applet = this;
	ViewController.appletakl();

	bufor = createImage(sizex,sizey);
	bg = bufor.getGraphics();
	timer.scheduleAtFixedRate(ViewModel, 10, 10);
	ViewModel.taketheboard();
	
	

	Toolkit toolkit = Toolkit.getDefaultToolkit();
	box = toolkit.getImage("img/box.jpg");
	floor = toolkit.getImage("img/floor.jpg");
	face = toolkit.getImage("img/face.png");
	exit = toolkit.getImage("img/exit.jpg");
	wall = toolkit.getImage("img/wall.jpg");;
	
	
}



public void update(Graphics g)
{
	bg.clearRect(0,0,sizex,sizey);
	paint(bg);
	g.drawImage(bufor,0,0,applet);
}
int i =2;

public void startorend()
{
	if(stan==0)
	{
		startorend SOS = new startorend();
		SokobanIff SI = new SokobanIff();
		SOS.view();
		SOS=SI;
		SOS.view();
		SokobanStart SS = new SokobanStartFactory().getInstance(i);
		SS.view();
		
	}
	if(stan==2)
	{
	SokobanEndAdapter SEA = new SokobanEndAdapter();
	SEA.view();
	
	}
}

public void paint(Graphics g)
{
	switch(stan)
	{
	case 0:
	startorend();
	stan=1;
	break;
	case 1:
	drawtheboard(g);
	break;
	case 2:
	startorend();
	end(g);
	break;
	}
}
public void end(Graphics g)
{
	
}
public void drawtheboard(Graphics g)
{
	
	for(int i = 0;i<ViewModel.board.length;i++)
	{
		for(int j=0;j<ViewModel.board[0].length;j++)
		{

			switch(ViewModel.board[i][j])
			{
			case 0:
				g.drawImage(floor,40*j,40*i,this);
				f=1;
				break;
			case 1:
				g.drawImage(wall,40*j,40*i,this);
				w=1;
				break;

			}
			if(ViewModel.exit[i][j]==2)
			{
				g.drawImage(exit,40*j,40*i,this);
			}
			switch(ViewModel.board[i][j])
			{

			case 3:
				g.drawImage(box,40*j,40*i,this);
				break;
			case 4:
				if(ViewModel.ifexit()==true){
					g.drawImage(exit,40*j,40*i,this);
					g.drawImage(face,40*j,40*i,this);
					break;
				}
				else{
				g.drawImage(floor,40*j,40*i,this);
				g.drawImage(face,40*j,40*i,this);
				break;
				}
			}
		}
	}
	
}




int getf(){
	return f;
}

int getw(){
	return w;
}




}


 
0

Pierwsze co mi przychodzi na myśl to, że linijkę wyżej, metoda createImage() zwraca Ci do zmiennej bufor nulla. Następnie jest próba wywołania z tej zmiennej metody getGraphics()
Jeśli chodzi o metodę createImage()

   public Image createImage(int width, int height) {
        ComponentPeer peer = this.peer;
        if (peer instanceof LightweightPeer) {
            if (parent != null) { return parent.createImage(width, height); }
            else { return null;}
        } else {
            return (peer != null) ? peer.createImage(width, height) : null;
        }
    }

Całkiem możliwe, że to własnie z niej leci null . To jest pierwsze co mi przychodzi na myśl. Najlepiej jeśli to sprawdzisz sobie linijka po linijce za pomocą Debuggera. Wtedy przekonasz się, co jest odpowiedzialne za tego nulla. Mi ciężko jest określić przyczynę bez dostępu do kodu :)

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