回顾一下昨天所学习的基于连接池的socket,其原理中的要点如下:服务器开放有限个pooledconnectionhandler线程用来处理连接;客户的连接请求均加入到pool连接池中(实际是linklist()对象);pooledconnectionhandler一旦发现连接池中有连接请求,就立即着手处理;大家都使用同一个pool(所以它是静态变量)
目前为止,有关java程序设计的一些基本内容都已经学习的差不多了.现在是学以致用的时候了.学习任何语言,要想真正的谈得上入门,都应该以一个实际的编程经验为标志的,我想.
以前用c++编过一个俄罗斯方块,觉得这个游戏的程序设计挺能体现面向对象的思想的.java和c++有很多共同点,依葫芦画瓢谁都会,那么就重新实现一遍吧,反正也忘得差不多了,权当温故知新.另外,既然花了那么多时间来研究socket,那就索性编出一个网络版的来.
俄罗斯方块的程序需要图形用户界面(gui),而前面编的java程序中,只有applet程序实现了图形界面,但那是在appletviewer或者浏览器的帮助下完成的.用java来实现图形用户界面,我们需要用到frame类.frame类是窗口类(windows)类的子类,是图形用户界面的基本窗口.阅读下面一个小程序并实现一下,就基本上可以对java下的图形用户界面有所了解了.
文件名:framememo.java
功能:弹出一个带有菜单的框架并且在框架里显示信息.在窗口中任意位置点击一下,程序退出.
import java.awt.*;
public class framememo extends frame
{
public string motd;
public framememo(string s)
{
super(s);//super在这里代表的是父类,和this所代表的本类相应,因此这里调用的是父类的构造函数
motd=s;
resize(300,300);
setmenu();
}
public framememo()//重载的构造函数
{
this("this is a memo of frame");//这里调用的是framememo(s)构造 函数
setmenu();
}
public void setmenu()
{
menu m,n;
m=new menu("examples");
m.add(new menuitem("basic"));
m.add(new menuitem("simple"));
n=new menu("more examples");
n.add(new menuitem("sub basic"));
m.add(n);
menubar mb=new menubar();
mb.add(m);
setmenubar(mb);
}
public void paint(graphics g)
{
g.drawstring(motd,15,15);
g.drawstring("click anywhere to exit",45,45);
}
public void start()
{
show();
}
public boolean mousedown(event e,int x,int y)
{
hide();//隐藏窗口
dispose();//释放资源
system.exit(0);
return false;
}
public static void main(string args[])
{
framememo m;
m=new framememo();
m.start();
}
}
import java.awt.*;
import java.applet.*;
public class layout extends frame
{
panel fnames,styles;//两个字体按钮放到fnames这个panel中,三个风格按钮放到styles这个panel中
button sans,serif;
button bold,bigger,smaller;//定义两个字体按钮,三个风格按钮
samplecanvas sample;//定义重载后的画布对象
string fname=new string("sansserif");
int fbold=0;
int fsize=12;
public layout(){
super("a memo of layout");
setfont(new font("sans",font.bold,12));
setlayout(new borderlayout());//设置borderlayout布局,该方式可安排五个元素
file://方位为东西南北中
file://下面的程序为设置底部即南边的两个按钮
fnames=new panel();
fnames.setlayout(new gridlayout(1,2,5,10));//为panel设置gridlayout布局
file://该布局为网格布局
file://四个参数分别为
file://行数,列数,水平间隔(像素),垂直间隔(像素)
sans=new button("sans serif");
fnames.add(sans);
serif=new button("sans serif");
fnames.add(serif); file://分别添加两个按钮
add(fnames,"south"); file://将panel列入borderlayout布局中
file://下面的程序为设置左部即西边的三个按钮
styles=new panel();
styles.setlayout(new gridlayout(3,1,10,5));
bold=new button("bold");
styles.add(bold);
bigger=new button("bigger");
styles.add(bigger);
smaller=new button("smaller");
styles.add(smaller);
add(styles,"west");
sample=new samplecanvas();
add(sample,"center");
setsize(200,200);//这句话别掉罗
// setvisible(true);
}
public void start(){
show();
}
public static void main(string[] args)//初始化
{
layout mainframe=new layout();
mainframe.start();
}
class samplecanvas extends canvas
{
string message;
public samplecanvas() file://类的构造函数
{
rewrite("sanserif"); file://只在创建对象的时候执行,java不支持析构函数
}
public void rewrite(string s)
{
setfont(new font(fname,fbold,fsize));
message="this font is"+fname;
repaint();
}
public void paint(graphics g)
{
g.drawstring(message,10,50);
}
}
}
class mainframe extends frame{
public mainframe(){//初始化工作,主要是给对象(按钮,画布等)布局
}
public boolean keydown(event e,int key){//处理键盘操作
}
public boolean action(event e,object arg){//处理鼠标操作
}
public void start(){//看前几天笔记
show();
}
public static void main(string args[]) throws ioexception{
mainframe app;
app=new mainframe();
app.start();
}
}2.maincanvas类.该画布对象将完成所有与方块有关的逻辑操作,从canvas类继承Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器