各位前辈,请教一个问题:想在另外一个线程中,定期检测某ip是否在线,如果在线,就在界面上使某个组件显红色,如果不在线,就显灰色。该怎么写?
import java.net.*;
import java.io.IOException;
import javax.swing.*;
import java.awt.Color;
public class IP
{
  JFrame f=new JFrame("测试界面组件在另一个线程中的更新") ;
  public static void main(String[] args)
  {
    IP ip=new IP();
    ip.init() ;
    
    TestIp tt=new TestIp() ;
    tt.start() ;
  }  public void init() 
  {
    
    f.setSize(350,250);
    f.setVisible(true); 
    jLabelip.setForeground(Color.lightGray);
    jLabelip.setHorizontalAlignment(SwingConstants.CENTER);
    jLabelip.setText("192.168.0.1");
    f.getContentPane().add(jLabelip);
    f.setVisible(true);
  }
  JLabel jLabelip = new JLabel();
  
}
class TestIp extends Thread //implements Readable
{
  public void run()
  {
    byte[] clint1 =
        {
         (byte) 192, (byte) 168, (byte) 0, (byte) 1};
    InetAddress addr = null;
    while (true)
    {
      try {
        Thread.sleep(5000);
      }
      catch (InterruptedException ex2) {
      }
      try
      {
        addr = InetAddress.getByAddress(clint1);
      }
      catch (UnknownHostException ex)
      {
      }
      try
      {
        if (addr.isReachable(5000))
        {
          //如果192.168.0.1在线,更新jLabelip为红色
        }
        else
        {
          //如果192.168.0.1不在线,则使jLabelip成为灰色
        }
      }
      catch (IOException ex1)
      {
      }
    }
  }
}

解决方案 »

  1.   

    setForeground(Color)
    setBackground(Color)试下上面两个另外Swing的组件支持使用htmlprivate static final String online = "<html><font color=\"fuchsia\">用户在线</font></html>";
    private static final String offline = "<html><font color=\"gray\">用户离线</font></html>"
    JLabel label = new JLabel();在线 label.setText(online);
    离线 label.setText(offline);
      

  2.   

    谢谢.可是用什么方法把它重显呢?就是说怎么用paint(),或者repaint(),update()使它们不停地更新呢?
      

  3.   

    请将线程类写为主类的内部类~或者在写一个线程类的构造函数,接收一个主类的对象!否则没法改变label的颜色!!