2014-01-06 3 views
-1

im пытается отобразить статус сервера зеленый на красном. Однако, похоже, я не могу изменить цвет апплета!Не удается получить статус сервера на апплете

@SuppressWarnings("serial") 
public class MinecraftPinger extends Applet { 

    boolean O = true; 

    public void Pinger() throws IOException, InterruptedException { 

     while (true) { 
      Socket socket = SocketFactory.getDefault().createSocket(); 
      try { 
       socket.setSoTimeout(5000); 
       socket.connect(new InetSocketAddress("192.148.1.1", 25565)); 
       socket.close(); 
       System.out.println(O); 
       Thread.sleep(600000); 
       repaint(); 
      } catch (ConnectException e) { 
       O = false; 
       repaint(); 
       Thread.sleep(600000); 

      } 
     } 
    }//ends Pinger 

    public void paint(Graphics g) { 
     try { 
      if (O == true) { 
       setSize(100, 25); 
       setBackground(Color.GREEN); 
      } else { 
       setSize(100, 25); 
       setBackground(Color.RED); 
      } 
     } catch (Exception ex) { 
      System.out.println("Fail!"); 

     } 

    } 
} 
+2

Пожалуйста, ваши код здесь; не на сторонних сайтах. –

+0

Я не думаю, что ваш IP-адрес компьютера «192.148.1.1', я думаю, вы запутываете свои компьютеры ip с маршрутизаторами –

+0

, что ip является поддельным, чтобы сделать апплет красным, но апплет не станет красным – superhamster

ответ

2

Ваш фон не отображается, потому что вы переопределяете метод краски. Вместо того чтобы устанавливать цвет фона попробуйте использовать Graphics объект, переданный вам в методе paint

public void paint(Graphics g) { 
    if (connectionWorked == true) { 
     g.setColor(Color.green); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
    } else { 
     g.setColor(Color.red); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
    } 
} 

Как EJP сказал, что вы никогда не должны вызывать блокирование операций во время EDT. Проще говоря, это означает, что вы не выполняете операции, которые занимают значительное количество времени во время обычного выполнения вашей программы (поток интерфейса/событий). В вашем случае не запрашивайте сервер и блокируйте апплет от инициализации и отображения. Этого можно избежать, используя следующий код:

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     // do some heavy lifting here 
    } 
}); 

Я не вижу, где Pinger() когда-либо называется. При использовании класса Applet вам необходимо перезаписать метод инициализации данных init().

Вы могли бы в конечном итоге с чем-то вроде этого

import java.applet.Applet; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.net.InetSocketAddress; 
import java.net.Socket; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

import javax.net.SocketFactory; 
import javax.swing.SwingUtilities; 

public class MinecraftPinger extends Applet { 

    private Boolean connectionWorked = null; 
    private boolean pinging = false; 

    @Override 
    public void init() { 

    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      pinging = true; 
      startPinging(); 
     } 
    }); 
    } 

    public void paint(Graphics g) { 
     if (connectionWorked == null) { 
      g.drawString("Attempting Connection...", getWidth()/2-40, getHeight()/2-10); 
     } else if (connectionWorked == true) { 
      g.setColor(Color.green); 
      g.fillRect(0, 0, getWidth(), getHeight()); 
     } else { 
      g.setColor(Color.red); 
      g.fillRect(0, 0, getWidth(), getHeight()); 
     } 
    } 

    public void startPinging() { 
     while (pinging) { 
      try { 
       Socket socket = SocketFactory.getDefault().createSocket(); 
       socket.setSoTimeout(2000); 
       socket.connect(new InetSocketAddress("mc.jujucraft.net", 25565)); 
       socket.close(); 
       connectionWorked = true; 
      } catch (Exception ex) { 
       connectionWorked = false; 
       Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      repaint(); 
      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 
} 
+0

Большое вам спасибо! – superhamster

+0

Просьба [принять] (http://meta.stackexchange.com/a/65088/155831) ответ, если он помог решить проблему. –

Смежные вопросы