java, client-server program

I'm writing a pong game that is multiplayer however when I run the below code I can connect to the server fine, but "running1" is never printed out from the Player class, neither is "running2" - it is like the program is getting stuck where I create the objectInputStream and ObjectOutputStream.

client code:

public class Frame extends JFrame{

public Rectangle2D.Float p;

int height = 400;
int width = 400;
Thread t;
PaintRacket canvas;
Ball ball;
Socket s;
ObjectInputStream in;
ObjectOutputStream out;
String serverIP = "127.0.0.1";
int serverPortNo = 9011;
JPanel panel;
JButton connectButton;
JButton startButton;
boolean started;
//MyMouseMotionAdapter ma = new MyMouseMotionAdapter();
public Frame(){
    new GamesList();
    started = false;
    this.setSize(width, height);
    ball = new Ball(20);
    canvas = new PaintRacket();
    this.add(canvas, BorderLayout.CENTER);
    this.setSize(width, height);
    t = new MyThread(this);
    startButton = new JButton("Start");
    startButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            started = true;
            t.start();
        }
    });
    connectButton = new JButton("Connect");
    connectButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            setupConnection();
        }
    });
    panel = new JPanel();
    panel.add(connectButton);
    panel.add(startButton);
    this.add(panel,BorderLayout.SOUTH);
    this.setVisible(true);
}

public void setupConnection(){
    try{
        s = new Socket(serverIP, serverPortNo);
        System.out.println("hello");
        //in = new ObjectInputStream(s.getInputStream());
        //out = new ObjectOutputStream(s.getOutputStream());
    }
    catch(Exception e){
        System.out.println(e.getMessage());

    }
}

class MyThread extends Thread{

JFrame ja;

public MyThread(JFrame ja){
    this.ja = ja;
}

public void run(){
    while(true){
        ja.repaint();
    try{
        Thread.sleep(20);
        }
    catch(InterruptedException e){

        }
    }
}

class PaintRacket extends JComponent{

int x_pos = 0;
int y_pos = 0;
public PaintRacket(){
    addMouseMotionListener(new MouseMotionAdapter(){

        public void mouseMoved(MouseEvent e){
            if(started){
                x_pos = e.getX() - 30;
                y_pos = 8;
                sendMousePos();
                repaint();
            }
        }
    });

}

    public void paint(Graphics g){
    //Paddle p = new Paddle();
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    //x_pos += 1;
    p = new Rectangle2D.Float();
    p.setRect(x_pos, 20, 60, 8);
    if(ball.intersects(x_pos, 20, 60, 8)){
        System.out.println("hit");
        System.out.println(x_pos); 
        System.out.println(y_pos);
        System.out.println(ball.getY_speed());
        ball.setY_speed((int)Math.abs(ball.getY_speed()));
    };
    g2.fill(p);     
    g2.fill(ball);
    //System.out.println("hello");

}
}
public class GamesList extends JFrame implements ActionListener{

JPanel jp;
JButton updateButton;
Client client;
JList<Player> list;

public  GamesList(){

    //client = new Client();        
    //list = new JList<Player>(client.getGamesList());
    //this.add(list);
    jp = new JPanel();
    this.add(jp);
    this.setSize(400, 600);
    updateButton = new JButton("Update");
    this.add(updateButton, BorderLayout.SOUTH);
    updateButton.addActionListener(this);
    this.setVisible(true);
}

public void actionPerformed(ActionEvent e){
    if(e.getSource() == updateButton){
        try{
            out.writeObject("getPlayerList");
        }catch(Exception ex){
            System.out.println(ex.getMessage());
        }
    }
    else if(e.getSource() == list){
        int id = list.getSelectedValue().getID();
        try{
            out.writeObject(id);
        }
        catch(IOException ex){
            System.out.println(ex.getMessage());
        }
    }
}

}

}

Server code:

 public class Server {

ServerSocket ss;
ArrayList<Player> players;

public Server(int port){

    players = new ArrayList<Player>();
    try{
        ss = new ServerSocket(port);
        acceptConnections();
    }
    catch(IOException e){
        System.out.println(e.getMessage());
    }
}

public void acceptConnections(){

    int playerID = 0;
    while(true){
        try{
            System.out.println("waiting for connections");
            new Thread(new Player(ss.accept(), playerID ++)).start();
            System.out.println("connection");
        }
        catch(Exception e){
            System.out.println("errorS : " + e.getMessage());
        }
    }
}

player code:

public class Player implements Runnable{

Object ob;
Player opponent;
Socket s;
ObjectInputStream obIn;
ObjectOutputStream obOut;
/*ObjectInputStream oppObIn;
ObjectOutputStream oppObOut;*/
int id;

Player(Socket s, int id){
    this.id = id;
    this.s = s;
}

public void run(){
    try{
        System.out.println("running");
        obIn = new ObjectInputStream(s.getInputStream());
        obOut = new ObjectOutputStream(s.getOutputStream());
        System.out.println("running1"); 

    }
    catch(IOException e){
        System.out.println(e.getMessage());
    }
    while(true){
        try{
            System.out.println("running2");
            ob = obIn.readObject(); 
            if(ob instanceof Player){
                addOpponent((Player)obIn.readObject());
                System.out.println("player");
            }
            else if(ob instanceof String){
                System.out.println("string");
            }
            //oppenent.getObjectOutputStream().writeObject(ob);
        }
        catch(Exception e){
            System.out.println("Player " +e.getMessage());
        }
    }
}
}