这两天开始拼命死坑java的一些环境配置和一些java的基础,怪只能怪自己当初都没去学习一些c语言或者是java语言的基础,现在开始看感觉很要命,很多的东西都是要自己去死记的,这个是我自己的第一感觉,大神不要喷,感觉入门学习java好难啊,不知道有没有什么诀窍什么的,前面要记的东西真的是很多啊,没办法,要学习就得刻苦,硬着头皮也得看下去,还有总结的一句话就是看书的时候别总想这还有多少书,多少知识点都还没看,你越是着急,看的效率越是低,最后发现你都不知道自己学习了什么的,我是用一整天的经验得出来的啊,血的教训啊,既然自己想要学习java,有了一个整体的学习路线后就得静下心来一章章的领悟透里面讲的是什么,下面把自己下午学习来的聊天系统发上来,界面比较粗糙,还有里面的一些东西还是没记住,不过没办法,一下不可能记住那么多的函数还有用法什么的,现在只能了解里面的原理,通过以后的做小项目进行一些记忆的巩固了。贴上源码。
package test;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
public class test
{
Frame f=new Frame("我的聊天室");
TextField tfIP=new TextField(15);
List lst=new List(6);
DatagramSocket ds;
/*由于 DatagramSocket 的构造函数声明可能抛出异常,我们的程序需要用 try…catch 语句进行异
常捕获处理,所以我们不能直接在这里调用 DatagramSocket 的构造函数对 ds 进行初始化,我们需要将 ds
的初始化放在 Chat 类的构造函数中去完成。*/
public test()
{
try
{
ds=new DatagramSocket(3000);
}catch(Exception ex){ex.printStackTrace();}
new Thread(new Runnable()
{
public void run()
{
byte buf[]=new byte[1024];
DatagramPacket dp= new DatagramPacket(buf,1024);
while(true)
{
try
{
ds.receive(dp);
lst.add(new String(buf,0,dp.getLength())+
":from"+dp.getAddress().getHostAddress(),0);
}catch(Exception e){e.printStackTrace();}
}
}
}).start();
}
public static void main(String [] args)
{
test chat=new test();
chat.init();
}
public void init()
{
f.setSize(300,300);
f.add(lst);
Panel p=new Panel();
p.setLayout(new BorderLayout());
p.add("West",tfIP);
TextField tfData=new TextField(20);
p.add("East",tfData);
f.add("South",p);
f.setVisible(true);
f.setResizable(true);//限制用户改变窗口的大小
//增加关闭窗口的事件处理代码
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
ds.close();
//程序退出时,关闭 Socket,释放相关资源
f.setVisible(false);
f.dispose();
System.exit(0);
}
});
//增加在消息文本框中按下回车键的事件处理代码
tfData.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//取出文本框中的消息字符串,并将其转换成字节数组
byte[] buf;
buf = e.getActionCommand().getBytes();
try
{
DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),3000);
ds.send(dp);
}catch(Exception ex){ex.printStackTrace();}
/*上面的 Exception 的引用变量名不能为 e,而是改写成了 ex,因为 e 已经在
actionPerformed 方法中作为形式参数变量名被定义过了。*/
((TextField)e.getSource()).setText("");
}
});
}
}