swt 关于DUP通信,不晓得哪里出问题了。望各位帮忙!!

tangqing0417 2011-09-07 10:41:28
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Button;
public class Frame
{
DatagramSocket ds ;
private Shell sShell = null;
private Text textArea = null;
private Label label = null;
private Text text = null;
private Label label1 = null;
private Text text1 = null;
private Label label2 = null;
private Button button = null;
Calendar cl=Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args)
{
Display display = Display.getDefault();
Frame thisClass = new Frame();
thisClass.createSShell();
thisClass.sShell.open();
while (!thisClass.sShell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private void createSShell()
{
sShell = new Shell();
sShell.setText("消息处理框C");
sShell.setSize(new Point(563, 371));
sShell.setLayout(null);
textArea = new Text(sShell, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
textArea.setBounds(new Rectangle(29, 34, 490, 185));
textArea.setFont(new Font(Display.getDefault(), "楷体_GB2312", 12, SWT.BOLD));
label = new Label(sShell, SWT.NONE);
label.setBounds(new Rectangle(36, 6, 110, 21));
label.setFont(new Font(Display.getDefault(), "楷体_GB2312", 12, SWT.BOLD));
label.setText("消息显示栏");
text = new Text(sShell, SWT.BORDER);
text.setBounds(new Rectangle(27, 247, 359, 31));
text.setFont(new Font(Display.getDefault(), "新宋体", 10, SWT.BOLD));
label1 = new Label(sShell, SWT.NONE);
label1.setBounds(new Rectangle(1, 222, 85, 21));
label1.setFont(new Font(Display.getDefault(), "楷体_GB2312", 10, SWT.BOLD));
label1.setText("请输入内容:");
text1 = new Text(sShell, SWT.BORDER);
text1.setBounds(new Rectangle(27, 307, 362, 32));
text1.setFont(new Font(Display.getDefault(), "新宋体", 10, SWT.BOLD));
label2 = new Label(sShell, SWT.NONE);
label2.setBounds(new Rectangle(0, 285, 73, 21));
label2.setFont(new Font(Display.getDefault(), "楷体_GB2312", 10, SWT.BOLD));
label2.setText("请输入IP:");
button = new Button(sShell, SWT.NONE);
button.setBounds(new Rectangle(418, 245, 111, 75));
button.setFont(new Font(Display.getDefault(), "楷体_GB2312", 10, SWT.BOLD));
button.setText("发送");
button.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{

@SuppressWarnings("null")
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
DatagramPacket dp=null;
byte buf[];
DatagramSocket ds =null ;

try
{
buf=(text.getText()).getBytes();
dp=new DatagramPacket(buf, buf.length, InetAddress.getByName(text1.getText()),3000);
}
catch (UnknownHostException e2)
{
// TODO Auto-generated catch block
e2.printStackTrace();
}
try
{
ds.send(dp);
}
catch (IOException e1)
{
// TODO Auto-generated catch block
System.out.println("数据发送失败!请重试!");
}

textArea.append(text.getText()+" "+"from"+" "+sdf.format(cl.getTime())+" "+dp.getAddress().getHostAddress()+"\n");
text.setText(""); }

});

new Thread(new Runnable()
{
public void run()
{
byte buf[]=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf, 1024);
while(true)
{
try
{
ds.receive(dp);
if(dp.getLength()>0)
{
String str=new String(buf, 0, dp.getLength());
textArea.append(str+"from"+sdf.format(cl.getTime())+dp.getAddress().getHostAddress()+"\n");
}
}
catch (IOException e)
{ e.printStackTrace();
}
}
}
}).start();
}

}
...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小绵羊 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 magong 的回复:]

引用 2 楼 tangqing0417 的回复:

public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
DatagramPacket dp=null;
byte buf[];
DatagramSocket ds =
null;

楼主看最后一行,ds还是Null。
后面ds.send(dp……
[/Quote]
++++++1把ds初始化一下
tangqing0417 2011-09-08
  • 打赏
  • 举报
回复
108行的是 ds.send(dp);
magong 2011-09-07
  • 打赏
  • 举报
回复
代码中最大的问题是:
DatagramSocket ds
变量没有初始化。
magong 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tangqing0417 的回复:]

public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
DatagramPacket dp=null;
byte buf[];
DatagramSocket ds =
null;
[/Quote]
楼主看最后一行,ds还是Null。
后面ds.send(dp);自然还会得到Null pointer exception
niuniu20008 2011-09-07
  • 打赏
  • 举报
回复
好多代码,看得眼疼。空指针异常
at socket.Frame$1.widgetSelected(Frame.java:108)
108行是什么?楼主发代码时,用上代码格式
tangqing0417 2011-09-07
  • 打赏
  • 举报
回复
Exception in thread "main" java.lang.NullPointerException
at socket.Frame$1.widgetSelected(Frame.java:108)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at socket.Frame.main(Frame.java:47)


这就是运行时显示的异常。
niuniu20008 2011-09-07
  • 打赏
  • 举报
回复
报什么错误啊,把报的错误贴出来
tangqing0417 2011-09-07
  • 打赏
  • 举报
回复
button.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{
@SuppressWarnings("null")
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
DatagramPacket dp=null;
byte buf[];
DatagramSocket ds =
null;
try
{
buf=(text.getText()).getBytes();
dp=new DatagramPacket(buf, buf.length, InetAddress.getByName(text1.getText()),5555);
}
catch (UnknownHostException e2)
{
// TODO Auto-generated catch block
e2.printStackTrace();
}
try
{
ds.send(dp);
}
catch (IOException e1)
{
// TODO Auto-generated catch block
//System.out.println("数据发送失败!请重试!");
e1.printStackTrace();
}

// textArea.append(text.getText()+" "+"from"+" "+sdf.format(cl.getTime())+" "+dp.getAddress().getHostAddress()+"\n");
text.setText("");

// TODO Auto-generated Event stub widgetSelected()
// TODO Auto-generated method stub
}

});
try
{
new Thread(new Runnable()
{

DatagramSocket ds =new DatagramSocket(5555);
public void run()
{
byte buf[]=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf, 1024);
while(true)
{
try
{
ds.receive(dp);
if(dp.getLength()>0)
{
String str=new String(buf, 0, dp.getLength());
textArea.append(str+"from"+sdf.format(cl.getTime())+dp.getAddress().getHostAddress()+"\n");
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
} catch (SocketException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
这是我后面改过的代码。可是还是出现异常啊。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧