Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    refresh del video lento.

    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?
    Giuseppe SPECCHIO

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    forse non centra nulla, ma hai provato ad usare il double buffering??

    per l'eccezione, secondo me non parte il thread... ogni tanto succede anche a me quando cerco di far partire qualche thread... di solito metto il lancio del thread in un ciclo che termina solo nel caso di Non-Eccezione... (sempre il turno dopo, almeno nelle mie prove)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    mi potresti fare un esempio pratico?
    Giuseppe SPECCHIO

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    per cominciare... sai cos'e' il double buffering?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    credo che sia una doppia area di memoria riservata per la gestione del JPannel nel quale il costruttore ha la variabile di istanza messa true. Cmq il mio problema l'ho risolto definendo un metodo paintComponent. Grazie dell'interessamento.
    Giuseppe SPECCHIO

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.