Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/05/2011, 10:01
marcwolf
 
Fecha de Ingreso: junio-2010
Mensajes: 353
Antigüedad: 13 años, 11 meses
Puntos: 6
Error de java.lang.NullPointerException

Mirad, me da este error y no sé porque a ver si alguién me lo puede aclarar plz esk no se como tengo que poner la exception esta de las narizes.

El archivo original(para abrir/cerrar/hablar i leer de puertos serie) es este;

Código:
package serialporttest;
import java.util.List;

import giovynet.nativelink.SerialPort;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;

public class Main {

	/**
	 * www.giovynet.com
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			SerialPort serialPort = new SerialPort();
			List<String> portsFree;
			portsFree = serialPort.getFreeSerialPort();
			/**** If there are free ports, use the first found. ****/
                        if (portsFree!=null&&portsFree.size()>0) {
				for (String free : portsFree) {
					System.out.println("Free port: "+free);
				}
				/****Open the port.****/
                                Parameters parameters = new Parameters();
				parameters.setPort(portsFree.get(0));
				parameters.setBaudRate(Baud._9600);
				System.out.println("Open port: "+portsFree.get(0));
				Com com = new Com(parameters);
                                /****Send data.****/
				String data = "Test Giovynet Driver.";
				System.out.println("<Send Data>");
				for (int i = 0; i < data.toCharArray().length; i++) {
					Thread.sleep(400);
					com.sendSingleData(data.toCharArray()[i]);
					System.out.print(data.toCharArray()[i]);
				}

                                /****Close the port.****/
				System.out.println("\n<End Send Data>");
				com.close();
			}else {
				System.out.println("No Free ports!!!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}
Tengo las siguientes clases;
EscombraRobot
Código:
String Estat;
MotorOrdres motors[] = new MotorOrdres[2];

public EscombraRobot(){

motors[1] = new MotorOrdres(1);
motors[0] = new MotorOrdres(0);
}
public void  Endevant()throws Throwable{
    
     Estat="Endevant";
motors[0].Avancar(Estat);
motors[1].Avancar(Estat);

}
MotorOrdres
Código:
Comunicacio Comunicacio;
     private static Com com;
int idMotor;

    MotorOrdres(int motor) {// Cada vez que hago motor.metodo -> paso el motor por aqui?
        idMotor=motor;
    }


    void Avancar(String Estat)throws Throwable {

        com =Comunicacio.AbrirPuerto();
        Comunicacio.EnviarSenyal(Estat,idMotor,com);

    }

Comunicacio

Código:
 private String Port;
    private Com com;

    public Comunicacio() {

        Port = "COM4";
    }

    public  Com AbrirPuerto() throws Throwable {
        try{Parameters Settings = new Parameters();
        Settings.setPort(Port);
        Settings.setBaudRate(Baud._9600);

        com = new Com(Settings);
        } catch (NoFreePorts error){
          System.out.println(error);
      }
        return com;
    }

    /**
     * Envia una String de ordre+mortorid al robotEscombra exemple-> endevant1
     */
    public void EnviarSenyal(String orden, int motor, Com com) throws Throwable {
        orden += motor;
        for (int i = 0; i < orden.toCharArray().length; i++) {
            //Thread.sleep(400);
            com.sendSingleData(orden.toCharArray()[i]);
        }
        CerrarPuerto(com);
    }
 public void CerrarPuerto(Com com) throws Throwable {
        com.close();
    }
Main que quiero que sea el controlador
Código:
   public class Main {
    private static Com com;

	/**
	 * www.giovynet.com
	 * @param args
	 */
	public static void main(String[] args) throws Throwable  {
           
try {
			/**** If there are free ports, use the first found. ****/
                	SerialPort serialPort = new SerialPort();
			List<String> portsFree;
			portsFree = serialPort.getFreeSerialPort();
                        if (portsFree!=null&&portsFree.size()>0) {
                            // Lista de Puertos disponibles
				for (String free : portsFree) {
					System.out.println("Free port: "+free);
				}
EscombraRobot e;
e= new EscombraRobot();
      e.Endevant();
      Comunicacio Comunicacio = new Comunicacio();

com=Comunicacio.AbrirPuerto();
      String SenyalRecibida=Comunicacio.LeerSenyal(com);
                                System.out.println("Senyal recibida de robot: "+SenyalRecibida);

				
			}else {
				System.out.println("No Free ports!!!");
			}
		} catch (NoFreePorts error){
          System.out.println(error);
      }

	}

    }
Se me olvidava xd, el error que me da es este;

Exception in thread "main" java.lang.NullPointerException
at ProjecteSintesi.Model.MotorOrdres.Avancar(MotorOrd res.java:27)
at ProjecteSintesi.Model.EscombraRobot.Endevant(Escom braRobot.java:37)
at ProjecteSintesi.Controlador.Main.main(Main.java:34 )



Explicación del código;
tengo la clase EscombraRobot que es la que representa el robot en si i tiene las ordenes para moverse, a la izquierda derecha etc.. sólo he puesta "endevant" que es adelante, entonces hago;
motors[0].Avancar(Estat);
motors[1].Avancar(Estat);
Para que se dirija hacia adelante el robot, i a la clase motorsOrdres(que representa los motores, tiene 2) tengo 3 opciones; adelante,atras i parado
Entonces esta habla con la clase "Comuncacio" que es la que envia la orden y el motor que tiene que moverse por el puerto serie.

Última edición por marcwolf; 28/05/2011 a las 10:10