Sockets e o metodo de desenhar na tela

oi, estou fazendo um jogo onde vc manda um valor de um socket no caso desse codigo gostaria que recebesse o valor um e depois desenhasse a bolinha um na cor vermelha mas dah um erro de :

java.lang.NullPointerException
Client.java:151

e akelas linhas mais doidas

poderiam me ajudar

(a classe servidor soh esta mandando 1)
ai vai a classe cliente…

estou usando threads…


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class Cliente extends JFrame 
{
 
 JPanel painel;
 
 String sorteada="";
 
 Socket conexao;
 PrintWriter saida;

 // método construtor
 public Cliente()
 {
  
  setSize(400, 500);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  
  JPanel painel = new JPanel();
  painel.setLayout(new BorderLayout());
  
  getContentPane().add(painel);
  
  //pack();//ajusta ao tamanho
  setVisible(true);
 
 }
 
 



 // método para executar o cliente  
 public void executaCliente()
 {
  try
  {
   conexao = new Socket("localhost", 4444);
   
   saida = new PrintWriter(conexao.getOutputStream(), true);
   saida.println("@");
   
   ClienteThread t = new ClienteThread(conexao);
   
   t.start();
   System.out.println(t.linha);
   sorteada=t.linha;
   repaint();
   
  } catch (UnknownHostException e) { }
    catch (IOException e) { }
 }
 
 public void paint(Graphics tela)
 {
  
  tela.setColor(Color.blue);
  
  //bola1 5
  //bola2 80
  //bola3 155
  //bola4 230
  //bola5 305
  
  tela.fillOval(5, 5, 60, 60);
  tela.fillOval(80, 5, 60, 60);
  tela.fillOval(155, 5, 60, 60);
  tela.fillOval(230, 5, 60, 60);
  tela.fillOval(305, 5, 60, 60);
  
  tela.fillOval(5, 80, 60, 60);
  tela.fillOval(80, 80, 60, 60);
  tela.fillOval(155, 80, 60, 60);
  tela.fillOval(230, 80, 60, 60);
  tela.fillOval(305, 80, 60, 60);
  
  tela.fillOval(5, 155, 60, 60);
  tela.fillOval(80, 155, 60, 60);
  tela.fillOval(155, 155, 60, 60);
  tela.fillOval(230, 155, 60, 60);
  tela.fillOval(305, 155, 60, 60);
  
  tela.fillOval(5, 230, 60, 60);
  tela.fillOval(80, 230, 60, 60);
  tela.fillOval(155, 230, 60, 60);
  tela.fillOval(230, 230, 60, 60);
  tela.fillOval(305, 230, 60, 60);
  
  tela.fillOval(5, 305, 60, 60);
  tela.fillOval(80, 305, 60, 60);
  tela.fillOval(155, 305, 60, 60);
  tela.fillOval(230, 305, 60, 60);
  tela.fillOval(305, 305, 60, 60);
  
  tela.fillOval(5, 380, 60, 60);
  tela.fillOval(80, 380, 60, 60);
  tela.fillOval(155, 380, 60, 60);
  tela.fillOval(230, 380, 60, 60);
  tela.fillOval(305, 380, 60, 60);
  
  tela.setColor(Color.black);
  Font f1 = new Font("TimesRoman", Font.BOLD, 40);
  tela.setFont(f1);
  
  //coluna + 75
  
  tela.drawString("1", 25, 45);
  tela.drawString("2", 100, 45);
  tela.drawString("3", 175, 45);
  tela.drawString("4", 250, 45);
  tela.drawString("5", 325, 45);
  
  
  //linha +75
  tela.drawString("6", 25, 120);
  tela.drawString("7", 100, 120);
  tela.drawString("8", 175, 120);
  tela.drawString("9", 250, 120);
  tela.drawString("10", 315, 120);
  
  tela.drawString("11", 15, 195);
  tela.drawString("12", 90, 195);
  tela.drawString("13", 165, 195);
  tela.drawString("14", 240, 195);
  tela.drawString("15", 315, 195);
  
  tela.drawString("16", 15, 270);
  tela.drawString("17", 90, 270);
  tela.drawString("18", 165, 270);
  tela.drawString("19", 240, 270);
  tela.drawString("20", 315, 270);
  
  tela.drawString("21", 15, 345);
  tela.drawString("22", 90, 345);
  tela.drawString("23", 165, 345);
  tela.drawString("24", 240, 345);
  tela.drawString("25", 315, 345);
  
  tela.drawString("26", 15, 420);
  tela.drawString("27", 90, 420);
  tela.drawString("28", 165, 420);
  tela.drawString("29", 240, 420);
  tela.drawString("30", 315, 420);

 if (sorteada.equals("1"))
  {
   tela.setColor(Color.red);
   tela.fillOval(5, 5, 60, 60);
   tela.drawString("1", 25, 45);
 }
  
 }

 // método principal
 public static void main(String[] args)
 {
  Cliente janela = new Cliente();
  
   
  janela.setTitle("Cliente");
  
  
  janela.executaCliente();
 }
}

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class ClienteThread extends Thread
{
 Socket conexao;
 BufferedReader entrada;
 
 String linha;
 
 
 public ClienteThread()
 {
 }
 
 // método construtor
 public ClienteThread(Socket s)
 {
  conexao = s;

  try
  {
   entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
  } catch (IOException e) { }
 }

 // método executado pela thread
 public void run()
 {
  try
  {
   while (true)
   {
    linha = entrada.readLine();
     
    System.out.println(linha);
    
   }
  } catch (IOException e) { }
 }


}

ficaria feliz com a ajuda de vcs.!

Bom cara, não li o código pois não sou competente o bastante para isso ainda, mas posso te dizer o que este erro te diz: na linha 151 do programa você está fazendo referência a uma variável que não tem valor definido ainda.

Espero ter ajudado um pouco.

ps.: você pode colocar esse montão de drawString num laço for, não pode?

Poxa fera, além dos laços (while ou for) nos drawBlabla e fillBlabla, esta linha não está no lugar correto : conexao = new Socket(“localhost”, 4444);
Crie um método void (não estático) e o chame onde vc quiser
Dê mais uma olhada sobre como se trabalhar com sockets,
não li seu código todo, pois agora estou sem tempo, depois eu passo aqui pra dar uma olhada.