try{
byte[] buf = new byte[1024];
DatagramSocket ds = new DatagramSocket(10005);
DatagramPacket dp =new DatagramPacket(buf,buf.length);
while(true)
{
ds.receive(dp);
listmessage.add(new String(buf,0,dp.getLength()),0);
ds.close();
}
}catch(Exception e){};
接收到一个数据包后 ds.close();后便不能接收下一个数据包
把ds.close();去掉后客户端在运行时会出现“程序没有响应”.请问应该怎样修改?
byte[] buf = new byte[1024];
DatagramSocket ds = new DatagramSocket(10005);
DatagramPacket dp =new DatagramPacket(buf,buf.length);
while(true)
{
ds.receive(dp);
listmessage.add(new String(buf,0,dp.getLength()),0);
ds.close();
}
}catch(Exception e){};
接收到一个数据包后 ds.close();后便不能接收下一个数据包
把ds.close();去掉后客户端在运行时会出现“程序没有响应”.请问应该怎样修改?
你说的也没错,去掉之后在下一个循环就从catch处退出了。
package com.im886;import java.net.DatagramPacket;
import java.net.DatagramSocket;import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;public class Rec { //private static List listmessage;
/**
* Launch the application
* @param args
*/
public static void main(String[] args)
{
Run run = new Run();
}
}
class Run
{
Display display = Display.getDefault();
Shell shell = new Shell();
Composite composite = new Composite(shell, SWT.NONE);
List listmessage= new List(composite, SWT.BORDER);
public Run()
{ new Thread(new Runnable()
{
public void run()
{
shell.setSize(255, 203);
shell.setText("SWT Application");
shell.open();
listmessage.setBounds(3, 4, 227, 156);
shell.layout();
composite.setBounds(6, 7, 236, 163);
try{ while(true)
{
byte[] buf = new byte[1024];
DatagramSocket ds = new DatagramSocket(10005);
DatagramPacket dp =new DatagramPacket(buf,buf.length);
ds.receive(dp);
listmessage.add(new String(buf,0,dp.getLength()),0);
ds.close();
}
}catch(Exception e){System.out.println("error");};
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
}
}).start();
}
}结果:
Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:3374)
at org.eclipse.swt.SWT.error(SWT.java:3297)
at org.eclipse.swt.SWT.error(SWT.java:3268)
at org.eclipse.swt.widgets.Widget.error(Widget.java:435)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:331)
at org.eclipse.swt.widgets.Control.setSize(Control.java:2566)
at com.im886.Run$1.run(Rec.java:39)
at java.lang.Thread.run(Unknown Source)