Prima di tutto un saluto sono nuovo di questo sito siccome ogni volta che ho problemi con java incontro sempre le delucidazioni del vostro sito ho deciso di registrarmi perchè è veramente interessante..detto questo
allora io devo fare un progetto che può inserire ricercare e cancellare oggetti in un database...
nello specifico il mio database deve essere formato di oggetti di una classe creata da me di nome CD un'altra DVD e poi un altra Libro...
è un progetto client server multithread con interfaccia grafica e database mysql...
allora mi sono bloccato in un punto, praticamente ho creato manualmente il database in mysql ed ho aggiunto la tabella inserisciCD dove poi posso inserire oggetti di tipo CD stessa cosa per DVD e per Libro(mi manca ora solo la parte di ricerca nel database e di cancellazioni di oggeti nel database).
ho collegato il mio bottone salva ad un action listener che manda attraverso il metodo Client.inserisciCD(parametri da inserire) l'oggetto che il client vuole caricare nel database.
Qui mi da però un errore:

codice:
New client accepted.

java.io.StreamCorruptedException: invalid stream header: 6D696F3B
	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
	at java.io.ObjectInputStream.<init>(Unknown Source)
	at Progetto.ServerThread.<init>(MultiThreadServer.java:70)
	at Progetto.MultiThreadServer.main(MultiThreadServer.java:44)
Exception in thread "Thread-1" java.lang.NullPointerException
	at Progetto.ServerThread.run(MultiThreadServer.java:81)
new client accepted si trova nel server ed è dopo l'accept quindi il server e il client suppongo siano connessi, però non aggiunge al database il nuovo CD

il server del progetto è questo:

codice:
package Progetto;
import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.sql.*;
public class MultiThreadServer {
	
	private static ServerSocket serverSocket;
    private static final int PORT = 7776;
    private static Connection con;
    public static void main(String[] args) {
    	
     try{ 
    	 Class.forName("com.mysql.jdbc.Driver");
    	 String nomeDB = "ArchivioDB";
    	 String nomeUtente = "root";
    	 String pwdUtente = "root";
    	 con = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente); 
//         boolean ris = con.createStatement().execute(Query.CreaArchivioCD);
//         if (ris){
//        	 System.out.println("Archivio CD");
//         }
     
     
     }catch(SQLException e) { 
    	 System.out.println("errore ");
    	 e.printStackTrace();
     }
     catch (ClassNotFoundException e) {
		e.printStackTrace();
     }
         
    	try {
            serverSocket = new ServerSocket(PORT);
      
            while(true) {
         	  //Wait for client...
            	Socket client = serverSocket.accept();
            	System.out.println("\nNew client accepted.\n");
            	ServerThread thread = new ServerThread(client,con);
                thread.start();
              // Esecuzione dei thread in base alla richiesta dei client
     
            }
    	}catch (IOException ioEx) {
            System.out.println("\nUnable to set up port!");
            ioEx.printStackTrace();
            System.exit(1);
        }
}
    
}

class ServerThread extends Thread {
	    Socket client;
	    ObjectInputStream input;
	    PrintWriter output;
	    Connection con;

	    public ServerThread(Socket socket,Connection con ) {
	        //Set up reference to associated socket...
	        client = socket;
	        this.con=con;

	        try {
	            input = new  ObjectInputStream(client.getInputStream());
	            output = new PrintWriter(client.getOutputStream(),true);	   

	        }
	        catch(IOException ioEx) {
	            ioEx.printStackTrace();
	        }
	    }
	    
	    public void run() {
	    	try {
				Object obj=input.readObject();
				if(obj.getClass().getName().equals("CD")){
					CD cd = (CD)obj;
					PreparedStatement ps = con.prepareStatement(Query.InsertCD);
					ps.setString(1,cd.getTitolo());
					ps.setString(2,cd.getAutore());
					ps.setInt(3,cd.getNumeroTracce());
					ps.setDouble(4,cd.getTempoEsecuzione());
					ps.setBoolean(5,cd.getPrestito());
					ps.setString(6,cd.getCommento());
					int res = ps.executeUpdate();
					if(res>0){
						output.print(true);
					} else 
						output.print(false);
					ps.close();
				}
				if(obj.getClass().getName().equals("DVD")){
					DVD dvd = (DVD)obj;
					PreparedStatement ps = con.prepareStatement(Query.InsertDVD);
					ps.setString(1,dvd.getTitolo());
					ps.setString(2,dvd.getRegista());
					ps.setDouble(3,dvd.getTempoEsecuzione());
					ps.setBoolean(4,dvd.getPrestito());
					ps.setString(5,dvd.getCommento());
					int res = ps.executeUpdate();
					if(res>0){
						output.print(true);
					} else 
						output.print(false);
					ps.close();
				}
				if(obj.getClass().getName().equals("Libro")){
					Libro libro = (Libro)obj;
					PreparedStatement ps = con.prepareStatement(Query.InsertLibro);
					ps.setString(1,libro.getTitolo());
					ps.setString(2,libro.getAutore());
					ps.setString(3,libro.getcasaEditrice());
					ps.setInt(4,libro.getAnnoPubblicazione());
					ps.setInt(5,libro.getNumeroPagine());
					ps.setBoolean(6,libro.getPrestito());
					ps.setString(7,libro.getCommento());
					
					int res = ps.executeUpdate();
					if(res>0){
						output.print(true);
					} else 
						output.print(false);
					ps.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}
	    }
}