2014-01-06 65 views
-1

即时尝试显示服务器状态绿色处于关闭状态。不过,我似乎无法使小程序改变颜色!无法获取小应用程序上的服务器状态

@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

你的心不是背景放映,因为你重写paint方法。相反,设置背景颜色的请尝试使用传递给你的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)。 –

相关问题