Witam, mam następujący problem z takim programem:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import java.awt.Color;
class MyWindowAdapter extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
class FieldThread extends Thread implements Runnable{
Label[][] lab;
int px;
int py;
int x;
int y;
Random rand;
double k;
double p;
FieldThread(Label[][] lab, int px, int py,int x,int y, Random rand,int k,double p){
this.lab=lab;
this.px=px;
this.py=py;
this.x=x;
this.y=y;
this.rand=rand;
this.k=k;
this.p=p;
start();
}
public void run(){
int r,g,b;
try{sleep(3000);}catch(Exception excep2){}
while(true){
try{sleep((long)((rand.nextLong()+0.5)*k));}catch(Exception excep1){}
if(rand.nextDouble()>=p){
lab[x][y].setBackground(new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255)));
}
else{
g=lab[mod(px-1,x)][mod(py-1,y)].getBackground().getGreen()+lab[mod(px+1,x)][mod(py-1,y)].getBackground().getGreen()+lab[mod(px-1,x)][mod(py+1,y)].getBackground().getGreen()+lab[mod(px+1,x)][mod(py+1,y)].getBackground().getGreen();
b=lab[mod(px-1,x)][mod(py-1,y)].getBackground().getBlue()+lab[mod(px+1,x)][mod(py-1,y)].getBackground().getBlue()+lab[mod(px-1,x)][mod(py+1,y)].getBackground().getBlue()+lab[mod(px+1,x)][mod(py+1,y)].getBackground().getBlue();
r=lab[mod(px-1,x)][mod(py-1,y)].getBackground().getRed()+lab[mod(px+1,x)][mod(py-1,y)].getBackground().getRed()+lab[mod(px-1,x)][mod(py+1,y)].getBackground().getRed()+lab[mod(px+1,x)][mod(py+1,y)].getBackground().getRed();
lab[x][y].setBackground(new Color(r,g,b));
}
}
}
/**
* Liczenie modulo p;
* @param x podawana liczba
* @param p modul
* @return x modulo p
*/
public static int mod(int x,int p){
int result=x;
if(result>=p){
while(x>p){
result=result-p;
}
}
else{
while(result<0){
result=result+p;
}
}
return result;
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import java.awt.Color;
class MyWindowAdapter extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
class FieldThread extends Thread implements Runnable{
Label[][] lab;
int px;
int py;
int x;
int y;
Random rand;
double k;
double p;
FieldThread(Label[][] lab, int px, int py,int x,int y, Random rand,int k,double p){
this.lab=lab;
this.px=px;
this.py=py;
this.x=x;
this.y=y;
this.rand=rand;
this.k=k;
this.p=p;
start();
}
public void run(){
int r,g,b;
try{sleep(3000);}catch(Exception excep2){}
while(true){
try{sleep((long)((rand.nextLong()+0.5)*k));}catch(Exception excep1){}
if(rand.nextDouble()>=p){
lab[x][y].setBackground(new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255)));
}
else{
g=lab[mod(px-1,x)][mod(py-1,y)].getBackground().getGreen()+lab[mod(px+1,x)][mod(py-1,y)].getBackground().getGreen()+lab[mod(px-1,x)][mod(py+1,y)].getBackground().getGreen()+lab[mod(px+1,x)][mod(py+1,y)].getBackground().getGreen();
b=lab[mod(px-1,x)][mod(py-1,y)].getBackground().getBlue()+lab[mod(px+1,x)][mod(py-1,y)].getBackground().getBlue()+lab[mod(px-1,x)][mod(py+1,y)].getBackground().getBlue()+lab[mod(px+1,x)][mod(py+1,y)].getBackground().getBlue();
r=lab[mod(px-1,x)][mod(py-1,y)].getBackground().getRed()+lab[mod(px+1,x)][mod(py-1,y)].getBackground().getRed()+lab[mod(px-1,x)][mod(py+1,y)].getBackground().getRed()+lab[mod(px+1,x)][mod(py+1,y)].getBackground().getRed();
lab[x][y].setBackground(new Color(r,g,b));
}
}
}
/**
* Liczenie modulo p;
* @param x podawana liczba
* @param p modul
* @return x modulo p
*/
public static int mod(int x,int p){
int result=x;
if(result>=p){
while(x>p){
result=result-p;
}
}
else{
while(result<0){
result=result+p;
}
}
return result;
}
}
class MyPanel extends Panel{
int x;
int y;
int k;
double p;
Random rand;
Label[][] field;
FieldThread[][] watek;
MyPanel(int x, int y, int k, double p){
this.x=x;
this.y=y;
this.k=k;
this.p=p;
setLayout(new GridLayout(x,y));
setBackground(Color.ORANGE);
field=new Label[x][y];
for(int i=0;i<x;i=i+1){
for(int j=0;j<y;j=j+1){
field[i][j]=new Label();
field[i][j].setBackground(new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255)));
field[i][j].setPreferredSize(new Dimension(5,5));
add(field[i][j]);
}
}
watek= new FieldThread[x][y];
for(int i=0;i<x;i=i+1){
for(int j=0;j<y;j=j+1){
watek[i][j]=new FieldThread(field,i,j,x,y,rand,k,p);
}
}
}
}
Program robi taką jakby wizualizacje kolorów na planszy mxn, jeśli wylosowana liczba jest większa od prawdopodobieństwa p (również zadanego) to zmienia swój kolor na losowy, w przeciwnym razie bierze kolory od sąsiadów(jeśli jest koniec tablicy to pobiera z drugiego końca, tylko wyskoczyły mi pewne problemy przez które nie potrafie przebrnąć:
Exception in thread "main" java.lang.NullPointerException
at MyPanel.<init>(FieldThread.java:105)
at MyApplet.main(MyApplet.java:37)
zatem rozchodzi się o linijki
field[i][j].setBackground(new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255)));
oraz
panel=new MyPanel(3,3,1,0.5);
Nie mam pojęcia co i jak, proszę o pomoc!
Pozdrawiam!
Shalom