日期:2014-05-20  浏览次数:20744 次

求助帖,关于线程,socket,sigar
主要是完成一个从被监控端收集CPU信息,然后通过socket发送到监控端的过程。被监控端的窗口上有两个按钮,开始和暂停。按下开始开启线程,每秒提取CPU信息并发送,按停止希望能关闭线程。但我线程没学好,开启后锁死在那了,其他按钮按不动了,求帮助,这里怎么搞。部分代码如下:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
p = true;
/*s();*/
while(p){
try{Thread.sleep(2000);}
catch(Exception e){}
start();
}
}
public void start(){
//建立联网线程
new Thread(new Runnable(){
public void run() {
try {
s=new Socket("127.0.0.1",5555);
//写
Sigar sigar = new Sigar();
Mem mem = sigar.getMem();
CpuPerc cpuCerc = sigar.getCpuPerc();
q = cpuCerc.getCombined()*100 + "%;" + cpuCerc.getUser()*100 + "%;"
+cpuCerc.getSys()*100+"%";
  byte[] b = q.getBytes();
os=s.getOutputStream(); 
os.write(b);
os.flush();
//读内容
Thread.sleep(1000);
/*is=s.getInputStream();
int len=is.available();
System.out.println("len:"+len);
byte[] bytes=new byte[len];
is.read(bytes);
String resut=new String(bytes);
System.out.println("resut:"+resut);*/
//TODO 这里通过返回结果处理
 
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SigarException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
}
}  
}).start();
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
//p = false;
//Thread.interrupted();
  这里不会写了,写了这个按钮也按不动
}



------解决方案--------------------
已解决