Sto cercando di realizzare un applicativo in Java che mi simuli il movimento libero di una sequenza di nodi all'interno di un'area limitata. Tale movimento ovviamente è caratterizzato da un tempo minimo e massimo di pausa ed una velocità minima e massima di movimento.
Ho realizzato il movimento di ogni singolo nodo con un Thread, però quando l'applicazione è in esecuzione, si ha un refresh ritardato del video, cioè i punti (che rappresentano i nodi) si muovono ma all'interno dell'area compaiono delle righe bianche orizzontali che attraversano l'intero pannello. Sotto riporto il codice:

codice:
class MRASimulationWindowPanel extends JPanel implements Runnable{

	//altezza, lunghezza
	private int alt, lun;	
	//nodi
	private RWMHost[] nodes;	
	
        //area di simulazione
        SimulationArena arena;
        private boolean isRunning = false;
        private boolean drawnode;
	private boolean idnodo = true;
	
	/**
        * Costruttore per un MRASimulationWindowPanel.
	* @param l di tipo int, rappresenta la lunghezza dell'area di lavoro.
	* @param a di tipo int, rappresenta l'altezza dell'area di lavoro.
	* @param ns di tipo RWMHost[], rappresenta la lista dei nodi.
	*/
	public MRASimulationWindowPanel(int l, int a, RWMHost[] ns){
	
                nodes = ns;
                alt=a;
                lun=l;              
                drawnode = true;
        	//creo l'area di simulazione
		arena = new SimulationArena((alt-100), (lun-100));
        	//elimino potenziali vecchi nodi
        	arena.removeAllNodes();
        	//inserisco i nuovi nodi
        	arena.addNodes(nodes);
                //avvio la simulazione per 10 sec
        	//arena.startSimulation(0);
        	
        	if(!isRunning){
        	
			isRunning = true;
				
			//Start
			Thread th = new Thread(this);		
			th.start();
			
		}//if
		
		//fermo la simulazione
		//arena.stopSimulation();
		

	}//MRASimulationWindowPanel
	
	private void drawNodes(){
		
		
		if(drawnode){
			//Prendo il contesto grafico
			Graphics g = this.getGraphics();
			
			//Grandezza del pannello
			int maxX = this.getWidth();
			int maxY = this.getHeight();
			
		
			//Ripulisco il panel
			g.clearRect(0, 0, this.getWidth(), this.getHeight());
			g.fillRect(2,2,maxX-4,maxY-4);
			
			//Disegno i nodi
			for(int i = 0 ; i < nodes.length ; i ++){
				
				//Posizione e range
				int xpos  = (int)nodes[i].getXPos();
				int ypos  = (int)nodes[i].getYPos();
				//int rpos  = (int)nodes[i].getR();
				
				String lab = "";
				
				if(idnodo)
					lab += String.valueOf((nodes[i].getId()+1));
				
				g.setColor(Color.GREEN);
				//punto rappresentante il nodo
				g.drawOval(xpos + 2, maxY - ypos - 4, 4, 4);
				//g.setColor(Color.BLUE);
				//disegna il raggio d'azione
                  		//g.drawOval((xpos-rpos), (ypos-rpos), (2*rpos),(2*rpos));
                  	
				g.setColor(Color.YELLOW);
				//Id del nodo
				g.drawString(lab, xpos + 4 , maxY - ypos - 4);
				
			}//for
		
		}//if
		
		
	}//drawNodes
	
	public void run() {
	
		arena.startSimulation(0);
	
		while(isRunning){
			drawNodes();
		}//while
					
	}//run
	
}//MRASimulationWindowPanel
Come è intiubile il metodo privato drawNodes() è quello che rappresenta i nodi.
Inoltre alcune volte non mi vengono visualizzati i nodi, ma bensì mi viene sollevata un'accesione del tipo:

codice:
C:\Programmi\Java\jdk1.5.0_09\bin\javaw.exe -classpath "C:\Documents and Settings\Giuseppe\Documenti\Java Source" it.specchio.mra.MRASimulationWindowTest
Exception in thread "Thread-2" java.lang.NullPointerException
	at it.specchio.mra.MRASimulationWindowPanel.drawNodes(MRASimulationWindowPanel.java:84)
	at it.specchio.mra.MRASimulationWindowPanel.run(MRASimulationWindowPanel.java:123)
	at java.lang.Thread.run(Thread.java:595)
Process MRASimulationWindowTest terminated.
dove l'istruzione alla riga 84 è la seguente:

codice:
g.clearRect(0, 0, this.getWidth(), this.getHeight());
sarà un problema della memoria della scheda video?