张生工作室

一切皆有可能

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  24 随笔 :: 3 文章 :: 11 评论 :: 0 Trackbacks

2007年9月9日 #

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class GroupServer extends MIDlet implements Runnable {
 
 private ServerSocketConnection ssc=null;
 private SocketConnection sc=null;
 private Vector v=new Vector();

 protected void startApp() throws MIDletStateChangeException {

    try {
   ssc=(ServerSocketConnection)Connector.open("socket://:9999");
    
   new Thread(this).start();
   
  } catch (IOException e) {
   
   e.printStackTrace();
  }
   

 }

 protected void destroyApp(boolean b) throws MIDletStateChangeException {


 }

 protected void pauseApp() {


 }

 public void run() {
  while(true)
  {
   
   try {
    sc=(SocketConnection)ssc.acceptAndOpen();
    ChatThread chat=new ChatThread(sc);
    v.addElement(chat);
    chat.start();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
  
 }
 class ChatThread extends Thread
 {
  private SocketConnection sc=null;
  private DataOutputStream dos=null;
  private DataInputStream dis=null;
  public ChatThread(SocketConnection sc)
  {
   this.sc=sc;
   try
   {
       dis=sc.openDataInputStream();
       dos=sc.openDataOutputStream();
   }
   catch(Exception e)
   {
    
   }
   
  }
  public void run()
  {
   while(true)
   {
    try
    {
       // dis=sc.openDataInputStream();
       // dos=sc.openDataOutputStream();
        String str=dis.readUTF();
        for(int i=0;i<v.size();i++)
        {
         ChatThread chat= (ChatThread)v.elementAt(i);
        //chat.dos.writeUTF(chat.dis.readUTF());
         chat.dos.writeUTF(str);
        // System.out.println(str+"\n");
        
        }
    }
    catch(Exception e)
    {
     
    }
   }
  }
 }

 

}

posted @ 2008-12-02 22:40 张生工作室 阅读(304) | 评论 (0)编辑 收藏

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class Client extends MIDlet  implements CommandListener {
 
 

 private DataInputStream dis=null;
 private DataOutputStream dos=null;
 private ServerSocketConnection ssc=null;
 //private StreamConnection sc=null;
 private SocketConnection sc=null;
 private TextField msg=null;
 private Form frm=null;
 private Command cmdSend=null;
 private StringItem imsg=null;
 
 protected void startApp() throws MIDletStateChangeException {
  
  frm=new Form("客户端");
  cmdSend=new Command("发送",Command.OK,1);
  msg=new TextField("请输入你的信息","",255,TextField.ANY);
  frm.append(msg);
  frm.addCommand(cmdSend);
  frm.setCommandListener(this);
  Display.getDisplay(this).setCurrent(frm);
  
  
  try {
   sc=(SocketConnection)Connector.open("socket://127.0.0.1:9999");
   //sc=ssc.acceptAndOpen();
   dis=sc.openDataInputStream();
   dos=sc.openDataOutputStream();
   Chat chat=new Chat();
   chat.start();
   
  } catch (IOException e) {
  
   e.printStackTrace();
  }
  

 }
 

 public void commandAction(Command c, Displayable d) {
  if(c==cmdSend)
  {
   try {
    dos.writeUTF(msg.getString()+"\n");
   } catch (IOException e) {
    // TODO Auto-generated catch block
    System.out.println(e.getMessage()+"\n");
   }
   msg.setString("");
  }
  
  
 }

 protected void destroyApp(boolean b) throws MIDletStateChangeException {
  

 }

 protected void pauseApp() {
 

 }
 
 class Chat extends Thread
 {
  public void run()
  {
   while(true)
   {
    
     try {
      imsg=new StringItem(dis.readUTF(),"");
      frm.insert(1, imsg);
    
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   }
   
   
  }
 }

 
 

 

}

posted @ 2008-12-01 20:28 张生工作室 阅读(238) | 评论 (0)编辑 收藏

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class Server extends MIDlet  implements CommandListener {
 
 

 private DataInputStream dis=null;
 private DataOutputStream dos=null;
 private ServerSocketConnection ssc=null;
 //private StreamConnection sc=null;
 private SocketConnection sc=null;
 private TextField msg=null;
 private Form frm=null;
 private Command cmdSend=null;
 private StringItem imsg=null;
 
 protected void startApp() throws MIDletStateChangeException {
  
  frm=new Form("服务器");
  cmdSend=new Command("发送",Command.OK,1);
  msg=new TextField("请输入你的信息","",255,TextField.ANY);
  frm.append(msg);
  frm.addCommand(cmdSend);
  frm.setCommandListener(this);
  Display.getDisplay(this).setCurrent(frm);
  
  
  try {
   ssc=(ServerSocketConnection)Connector.open("socket://:9999");
   sc=(SocketConnection)ssc.acceptAndOpen();
   dis=sc.openDataInputStream();
   dos=sc.openDataOutputStream();
   Chat chat=new Chat();
   chat.start();
   
  } catch (IOException e) {
  
   e.printStackTrace();
  }
  

 }
 

 public void commandAction(Command c, Displayable d) {
  if(c==cmdSend)
  {
   try {
    dos.writeUTF(msg.getString()+"\n");
   } catch (IOException e) {
    // TODO Auto-generated catch block
    System.out.println(e.getMessage()+"\n");
   }
   msg.setString("");
  }
  
  
 }

 protected void destroyApp(boolean b) throws MIDletStateChangeException {
  

 }

 protected void pauseApp() {
 

 }
 
 class Chat extends Thread
 {
  public void run()
  {
   while(true)
   {
    
     try {
      imsg=new StringItem( dis.readUTF(),"");
      frm.insert(1, imsg);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   }
   
   
  }
 }

 
 

 

}

posted @ 2008-12-01 20:28 张生工作室 阅读(357) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MessageMIDlet extends MIDlet {

 
 private welcome wcfrm=null;
 
 public MessageMIDlet() {

 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {


 }

 protected void pauseApp() {
 

 }

 protected void startApp() throws MIDletStateChangeException {
 
  wcfrm=new welcome(this);
  Display.getDisplay(this).setCurrent(wcfrm);
 }

}

class welcome extends Form implements CommandListener
{

 
    private Command cmdExit=null;
    private Command cmdWrite=null;
    private writemsg wrfrm=null;
    private MIDlet let=null;
   
    public welcome(MIDlet mlet)
    {
     super("欢迎使用本程序");
     let=mlet;
 
     cmdExit=new Command("退出",Command.EXIT,1);
     cmdWrite=new Command("写短信",Command.SCREEN,1);
     this.addCommand(cmdExit);
     this.addCommand(cmdWrite);
     this.setCommandListener(this);
     
    }
 public void commandAction(Command c, Displayable d) {
 
   if(c==cmdExit)
   {
  
    let.notifyDestroyed();
   }
   else
    if(c==cmdWrite)
    {
     wrfrm=new writemsg(let);
     Display.getDisplay(let).setCurrent(wrfrm);
   
    
    }
 
 }

}
class writemsg extends javax.microedition.lcdui.Form implements CommandListener,ItemStateListener
{
 

 private Command cmdBack=null;
 private Command cmdwrNum=null;
 private MIDlet let=null;
 private TextField tf=null;
 private Command cmdDel=null;
 private writeNum2 wrnum=null;
 
 

 public writemsg(MIDlet mlet)
 {
 
  super("请输入短信内容");
  let=mlet;
  cmdBack=new Command("返回",Command.EXIT,1);
  cmdwrNum=new Command("发送",Command.SCREEN,1);
  cmdDel=new Command("删除",Command.EXIT,1);
  this.addCommand(cmdBack);
  this.addCommand(cmdwrNum);
 
  tf= new  TextField("","",255,TextField.ANY);
  //tf.addCommand(cmdDel);
  this.append(tf);
  this.setItemStateListener(this);
  this.setCommandListener(this);
  tf.setLayout(TextField.LAYOUT_VEXPAND);
 }
 
 public void commandAction(Command c, Displayable d) {
 
  if(c==cmdBack)
  {
   Display.getDisplay(let).setCurrent(new welcome(let));
  
  }else if(c==cmdwrNum)
  {
  wrnum=new  writeNum2(let);
   Display.getDisplay(let).setCurrent(wrnum);
  
  }else if(c==cmdDel)
  {
   int p=tf.getCaretPosition();
   if(p>0)
   {
    tf.delete(p-1, 1);
   }
   if(tf.getString().length()==0)
   {
      this.removeCommand(cmdDel);
      this.addCommand(cmdBack);
   
   }
  
  }

 
 }

 public void itemStateChanged(Item i) {
 
  if(i==tf)
  {
    if( tf.getString().length()>0)
    {
    // this.addCommand(cmdDel);
     this.removeCommand(cmdBack);
     this.addCommand(cmdDel);
    }
    else
    {
     this.removeCommand(cmdDel);
     this.addCommand(cmdBack);
    }
  
  
  }
 
 
 }
 
 
}

 

class writeNum2 extends javax.microedition.lcdui.Form implements CommandListener,ItemStateListener
{
 

 private Command cmdBack=null;
 private Command cmdwrNum=null;
 private MIDlet let=null;
 private TextField tf=null;
 private Command cmdDel=null;
 private Form preFrm=null;
 private boolean sendflag=false;

 
 

 public writeNum2(MIDlet mlet)
 {
 
  super("请输入对方号码");
  let=mlet;
  preFrm=(Form) Display.getDisplay(let).getCurrent();
  cmdBack=new Command("返回",Command.EXIT,1);
  cmdwrNum=new Command("发送",Command.SCREEN,1);
  cmdDel=new Command("删除",Command.EXIT,1);
  this.addCommand(cmdBack);
  this.addCommand(cmdwrNum);
 
  tf= new  TextField("","",13,TextField.NUMERIC);
  //tf.addCommand(cmdDel);
  this.append(tf);
  this.setItemStateListener(this);
  this.setCommandListener(this);
 
 }
 
 public void commandAction(Command c, Displayable d) {
 
  if(c==cmdBack)
  {
  if (sendflag)
  Display.getDisplay(let).setCurrent(new welcome(let));
  else
   Display.getDisplay(let).setCurrent(this.preFrm);
  
  }else if(c==cmdwrNum)
  {

    String msg= ((TextField)(preFrm.get(0))).getString();
    String phonenum= tf.getString();
   
    this.append("信息内容:"+ msg);
    this.append("发送号码:"+ phonenum);
    this.append("发送状态:成功");
    this.delete(0);
    this.removeCommand(cmdwrNum);
    this.removeCommand(cmdDel);
    this.addCommand(cmdBack);
    sendflag=true;
  }else if(c==cmdDel)
  {
   int p=tf.getCaretPosition();
   if(p>0)
   {
    tf.delete(p-1, 1);
   }
   if(tf.getString().length()==0)
   {
      this.removeCommand(cmdDel);
      this.addCommand(cmdBack);
   
   }
  
  }

 
 }


 public void itemStateChanged(Item i) {
 
  if(i==tf)
  {
    if( tf.getString().length()>0)
    {
    // this.addCommand(cmdDel);
     this.removeCommand(cmdBack);
     this.addCommand(cmdDel);
    }
    else
    {
     this.removeCommand(cmdDel);
     this.addCommand(cmdBack);
    }
  
  
  }
 
 
 }
 
 
}

/*

class writeNum extends Form implements CommandListener
{

 private MIDlet let=null;
 private Command cmdSend=null;
 private Command cmdBack=null;
 private TextField num=null;
 private Form backfrm=null;
 public writeNum(MIDlet mlet) {
 
  super("请输入要发送的号码");
  let=mlet;
  num=new TextField("","",13,TextField.NUMERIC);
  this.append(num);
  cmdSend=new Command("发送",Command.OK,1);
  cmdBack=new Command("返回",Command.BACK,1);
  this.addCommand(cmdSend);
  this.addCommand(cmdBack);
  this.backfrm=(Form) Display.getDisplay(let).getCurrent();
  this.setCommandListener(this);
 
 
 }

 public void commandAction(Command c, Displayable d) {
  if(c==cmdSend)
  {
   try
   {
    String msg=((TextField)this.backfrm.get(0)).getString();//当跨几个Form时应该怎么办?
    this.append("信息:"+ msg+"已发送到:"+ num.getString());
  
   this.delete(0);
   this.setTitle("信息已发送成功");
   }
   catch(Exception e)
   {
    this.append("信息成功发送");
   }
  }
  else if(c==cmdBack)
  {
   Display.getDisplay(let).setCurrent(this.backfrm);
  }
 
 
 }
 
}
**/

 

posted @ 2008-11-28 13:06 张生工作室 阅读(378) | 评论 (1)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MessageMIDlet extends MIDlet {

 
 private welcome wcfrm=null;
 
 public MessageMIDlet() {

 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {


 }

 protected void pauseApp() {
 

 }

 protected void startApp() throws MIDletStateChangeException {
 
  wcfrm=new welcome(this);
  Display.getDisplay(this).setCurrent(wcfrm);
 }

}

class welcome extends Form implements CommandListener
{

 
    private Command cmdExit=null;
    private Command cmdWrite=null;
    private writemsg wrfrm=null;
    private MIDlet let=null;
   
    public welcome(MIDlet mlet)
    {
     super("欢迎使用本程序");
     let=mlet;
 
     cmdExit=new Command("退出",Command.EXIT,1);
     cmdWrite=new Command("写短信",Command.SCREEN,1);
     this.addCommand(cmdExit);
     this.addCommand(cmdWrite);
     this.setCommandListener(this);
     
    }
 public void commandAction(Command c, Displayable d) {
 
   if(c==cmdExit)
   {
  
    let.notifyDestroyed();
   }
   else
    if(c==cmdWrite)
    {
     wrfrm=new writemsg(let);
     Display.getDisplay(let).setCurrent(wrfrm);
   
    
    }
 
 }

}
class writemsg extends javax.microedition.lcdui.Form implements CommandListener,ItemStateListener
{
 

 private Command cmdBack=null;
 private Command cmdwrNum=null;
 private MIDlet let=null;
 private TextField tf=null;
 private Command cmdDel=null;
 private writeNum wrnum=null;
 
 

 public writemsg(MIDlet mlet)
 {
 
  super("请输入短信内容");
  let=mlet;
  cmdBack=new Command("返回",Command.EXIT,1);
  cmdwrNum=new Command("发送",Command.SCREEN,1);
  cmdDel=new Command("删除",Command.EXIT,1);
  this.addCommand(cmdBack);
  this.addCommand(cmdwrNum);
 
  tf= new  TextField("","",255,TextField.ANY);
  //tf.addCommand(cmdDel);
  this.append(tf);
  this.setItemStateListener(this);
  this.setCommandListener(this);
 
 }
 
 public void commandAction(Command c, Displayable d) {
 
  if(c==cmdBack)
  {
   Display.getDisplay(let).setCurrent(new welcome(let));
  
  }else if(c==cmdwrNum)
  {
   wrnum=new writeNum(let);
   Display.getDisplay(let).setCurrent(wrnum);
  
  }else if(c==cmdDel)
  {
   int p=tf.getCaretPosition();
   if(p>0)
   {
    tf.delete(p-1, 1);
   }
   if(tf.getString().length()==0)
   {
      this.removeCommand(cmdDel);
      this.addCommand(cmdBack);
   
   }
  
  }

 
 }

 public void itemStateChanged(Item i) {
 
  if(i==tf)
  {
    if( tf.getString().length()>0)
    {
    // this.addCommand(cmdDel);
     this.removeCommand(cmdBack);
     this.addCommand(cmdDel);
    }
    else
    {
     this.removeCommand(cmdDel);
     this.addCommand(cmdBack);
    }
  
  
  }
 
 
 }
 
 
}

class writeNum extends Form implements CommandListener
{

 private MIDlet let=null;
 private Command cmdSend=null;
 private Command cmdBack=null;
 private TextField num=null;
 private writemsg backfrm=null;
 public writeNum(MIDlet mlet) {
 
  super("请输入要发送的号码");
  let=mlet;
  num=new TextField("","",13,TextField.NUMERIC);
  this.append(num);
  cmdSend=new Command("发送",Command.OK,1);
  cmdBack=new Command("返回",Command.BACK,1);
  this.addCommand(cmdSend);
  this.addCommand(cmdBack);
  this.backfrm=(writemsg) Display.getDisplay(let).getCurrent();
  this.setCommandListener(this);
 
 
 }

 public void commandAction(Command c, Displayable d) {
  if(c==cmdSend)
  {
   try
   {
    String msg=((TextField)this.backfrm.get(0)).getString();//当跨几个Form时应该怎么办?
    this.append("信息:"+ msg+"已发送到:"+ num.getString());
  
   this.delete(0);
   this.setTitle("信息已发送成功");
   }
   catch(Exception e)
   {
    this.append("信息成功发送");
   }
  }
  else if(c==cmdBack)
  {
   Display.getDisplay(let).setCurrent(this.backfrm);
  }
 
 
 }
 
}

 

posted @ 2008-11-28 00:04 张生工作室 阅读(204) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemCommandListener;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDletItemCommmandListener extends MIDlet implements ItemCommandListener,CommandListener,ItemStateListener {
                                                              
 
 private Form frm=new Form("Item监听器");
 private TextField uid=new TextField("用户名","",20,TextField.ANY);
 private TextField pwd=new TextField("密码","",20,TextField.PASSWORD);
 private Display dis=Display.getDisplay(this);
 private Command Del=new Command("删除",Command.ITEM,1);
 
 public MIDletItemCommmandListener() {
  
 }

 protected void startApp() throws MIDletStateChangeException {
  
  
  
  frm.append(uid);
  uid.addCommand(Del);
  pwd.addCommand(Del);
  pwd.setItemCommandListener(this);
  uid.setItemCommandListener(this);
  frm.append(pwd);
  dis.setCurrent(frm);
  dis.setCurrentItem(pwd);
  frm.setItemStateListener(this);
  


 }
 
 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 

 }

 protected void pauseApp() {
  

 }

 public void commandAction(Command c, Item i) {
  
  if(c==Del)
  {
   TextField tf=(TextField)i;
   
   int p=tf.getCaretPosition();
   if(p>0)
   {
   tf.delete(p-1, 1);
   }
  }
 
  
 }

 public void commandAction(Command c, Displayable d) {
  
  
 }

 public void itemStateChanged(Item i) {
  
    if(i==uid)
    {
     frm.setTitle("用户名"+uid.getString());
    } else if(i==pwd)
    {
     frm.setTitle("密码"+uid.getString());
    }
  
 }

 

}

posted @ 2008-11-27 08:49 张生工作室 阅读(403) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemCommandListener;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDletItemCommmandListener extends MIDlet implements ItemCommandListener,CommandListener {
                                                              
 
 private Form frm=new Form("Item监听器");
 private TextField uid=new TextField("用户名","",20,TextField.ANY);
 private TextField pwd=new TextField("密码","",20,TextField.PASSWORD);
 private Display dis=Display.getDisplay(this);
 private Command Del=new Command("删除",Command.ITEM,1);
 
 public MIDletItemCommmandListener() {
  // TODO Auto-generated constructor stub
 }

 protected void startApp() throws MIDletStateChangeException {
  
  
  
  frm.append(uid);
  uid.addCommand(Del);
  pwd.addCommand(Del);
  pwd.setItemCommandListener(this);
  uid.setItemCommandListener(this);
  frm.append(pwd);
  dis.setCurrent(frm);
  dis.setCurrentItem(pwd);
  


 }
 
 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub

 }

 protected void pauseApp() {
  

 }

 public void commandAction(Command c, Item i) {
  
  if(c==Del)
  {
   TextField tf=(TextField)i;
   
   int p=tf.getCaretPosition();
   if(p>0)
   {
   tf.delete(p-1, 1);
   }
  }
 
  
 }

 public void commandAction(Command c, Displayable d) {
  
  
 }

 

}

posted @ 2008-11-27 08:34 张生工作室 阅读(569) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class ListImage extends MIDlet {
 
 
 private List list;
 private Display dis;

 public ListImage() {
  // TODO Auto-generated constructor stub
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub

 }

 protected void pauseApp() {
  // TODO Auto-generated method stub

 }

 protected void startApp() throws MIDletStateChangeException {
  
  
  list=new List("列表",List.MULTIPLE);
  Image img=null;
  try
  {
   
  img=Image.createImage("/mlogo.PNG");
  
  
  }
  catch(Exception e)
  {
   System.out.println("Error");
  }
  list.append("图片", img);
  Font f=null;
  f=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_UNDERLINED, Font.SIZE_LARGE);
  list.setFont(0, f);
  dis=Display.getDisplay(this);
  dis.setCurrent(list);
  // TODO Auto-generated method stub

 }

}

posted @ 2008-11-26 09:54 张生工作室 阅读(240) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MIDlet3 extends MIDlet implements CommandListener  {
 
 private List list=null;
 
 private Command cmdOk=null;
 
 private Display dis=null;

 public MIDlet3() {
  // TODO Auto-generated constructor stub
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub

 }

 protected void pauseApp() {
  // TODO Auto-generated method stub

 }

 protected void startApp() throws MIDletStateChangeException {
  
    cmdOk=new Command("确定",Command.OK,1);
   
    list=new List("请选择",List.MULTIPLE);
  
  for(int i=0;i<10;i++)
  {
   list.append("列表"+i, null);
   
  }
  list.addCommand(cmdOk);
  dis=Display.getDisplay(this);
  list.setCommandListener(new Operater());
  dis.setCurrent(list);
  // TODO Auto-generated method stub

 }

 public void commandAction(Command c, Displayable d) {
    //Method1
  int size=list.size();
  for(int i=0;i<size;i++)
  {
   if(list.isSelected(i))
   {
    System.out.print(list.getString(i));
   }
  }
  //Method 2
  /*
  boolean[] Flags=new boolean[list.size()];
     list.getSelectedFlags(Flags);
     for(int i=0;i<list.size();i++)
     {
      if(Flags[i])
      {
       System.out.print(list.getString(i));
      }
     }
     */
  
 }

}

 

 

posted @ 2008-11-26 09:35 张生工作室 阅读(179) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MIDlet3 extends MIDlet implements CommandListener  {
 
 private List list=null;
 
 private Command cmdOk=null;
 
 private Display dis=null;

 public MIDlet3() {
  // TODO Auto-generated constructor stub
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub

 }

 protected void pauseApp() {
  // TODO Auto-generated method stub

 }

 protected void startApp() throws MIDletStateChangeException {
  
    cmdOk=new Command("确定",Command.OK,1);
   
    list=new List("请选择",List.MULTIPLE);
  
  for(int i=0;i<10;i++)
  {
   list.append("列表"+i, null);
   
  }
  //list.addCommand(cmdOk);
  
  list.setCommandListener(new Operater());
  dis.setCurrent(list);
  // TODO Auto-generated method stub

 }

 public void commandAction(Command c, Displayable d) {
    //Method1
  int size=list.size();
  for(int i=0;i<size;i++)
  {
   if(list.isSelected(i))
   {
    System.out.print(list.getString(i));
   }
  }
  //Method 2
  boolean[] Flags=new boolean[list.size()];
     list.getSelectedFlags(Flags);
     for(int i=0;i<list.size();i++)
     {
      if(Flags[i])
      {
       System.out.print(list.getString(i));
      }
     }
  
 }

}

 

 

posted @ 2008-11-26 08:52 张生工作室 阅读(190) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MIDlet2 extends MIDlet  {
 
 private List list;
 
 private Command cmdOk;
 
 private Display dis;

 public MIDlet2() {
  // TODO Auto-generated constructor stub
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub

 }

 protected void pauseApp() {
  // TODO Auto-generated method stub

 }

 protected void startApp() throws MIDletStateChangeException {
  
    cmdOk=new Command("确定",Command.OK,1);
   
    list=new List("请选择",List.EXCLUSIVE);
  
  for(int i=0;i<10;i++)
  {
   list.append("列表"+i, null);
   
  }
  list.addCommand(cmdOk);
  dis=Display.getDisplay(this);
  list.setCommandListener(new Operater());
  dis.setCurrent(list);
  // TODO Auto-generated method stub

 }


  


}

class Operater implements javax.microedition.lcdui.CommandListener
{


 public void commandAction(Command c, Displayable d) {
  
  
  if(c.getLabel().equals("确定"))
  {
   List l=(List)d;
     l.setTitle( l.getString(l.getSelectedIndex())); 
  }
  
 }
 
 
}

posted @ 2008-11-26 08:40 张生工作室 阅读(123) | 评论 (0)编辑 收藏

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MIDlet1 extends MIDlet implements javax.microedition.lcdui.CommandListener {

 
 private Display dis;
 private List list;

 
 public MIDlet1() {
  // TODO Auto-generated constructor stub
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub

 }

 protected void pauseApp() {
  // TODO Auto-generated method stub

 }

 protected void startApp() throws MIDletStateChangeException {
  

  list=new List("列表",List.IMPLICIT);

 

  list.setCommandListener(this);
  for(int i=0;i<100;i++)
  {
   list.append("表列"+ i, null);
  }
  

  
 
  
  dis=Display.getDisplay(this);
  
  dis.setCurrent(list);
  
  // TODO Auto-generated method stub

 }

 public void commandAction(Command cmd, Displayable dis) {
  
  
 if(cmd==list.SELECT_COMMAND)
 {
  list.setTitle(list.getString(list.getSelectedIndex()));
 }
 
  
  // TODO Auto-generated method stub
  
 }

}

posted @ 2008-11-26 08:16 张生工作室 阅读(175) | 评论 (0)编辑 收藏

     摘要: 第四章 管理信息系统规划与开发方法   开发管理信息系 统是一个投资巨大、历时很长、涉及面很广的工程项目,如果没有进行规划或规划不合理,不仅造成开发过程的直接损失,由此而引起的企业运行不好的间接损失更 是难以估计。人们通常认为,假若一个操作错误可能损失几万元,那么一个设计错误就能损失几十万元,一个计划错误就能损失几百万元,而一个规划错误的损失则 能达到千万元,甚至上亿元。一个科学合理的系...  阅读全文
posted @ 2008-07-26 15:20 张生工作室 阅读(6085) | 评论 (0)编辑 收藏

     摘要: Struts2+spring2+hibernate3整合方案 最近闲来无事可做,于是开始学习struts2。Struts2和struts1、webwork2有什么区别我也不说了,网上有很多这方面的资料。以前在项目中从未使用过struts,一直使用spring+hibernate,现在既然学习了Struts,也不能浪费,于是乎开始琢磨着怎么整合这3个框架。整合原理以spring为容器,管理hibe...  阅读全文
posted @ 2008-05-13 12:20 张生工作室 阅读(318) | 评论 (0)编辑 收藏

Matlab6.5使用
第1章  Matlab6.5使用方法

1.Matlab6.5简介
1.1  21世纪的科学计算语言
☺功能强大
   数值计算、符号运算、图形可视化
☺语言简单
☺扩充能力强、可开发性好  
☺编程容易、效率高

1.2  Matlab6.5的新特点
☺开发环境
  
☺数值处理

☺程序及数据结构  
☺图形处理

☺用户图形界面

☺应用程序接口

1.3  Matlab网上资源

http://www.mathsworks.com

ftp.mathworks.com

……

2.Matlab6.5桌面平台
☺Matlab主窗口

☺命令窗口

☺历史窗口

☺当前目录窗口

☺发明说明书窗口

☺工作间管理窗口

3.Matlab6.5帮助系统
☺联机帮助系统
 选中Help下拉菜单的前四项中任何一项;
 在命令窗口中执行Helpwin、helpdesk、doc;
 直接按主窗口的?按钮.

☺命令窗口查询帮助
  help系列----help、help+函数(类)名、helpwin、helpdesk;
 lookfor函数;
 其他帮助命令
 exist—变量检验函数;
 what---目录中文件列表;
 who---内存变量列表;
 whos---内存变量详细信息;
 which---确定文件位置。

☺联机演示系统
1.基本介绍窗口
>> intro

2.演示界面
help--demos
>>demo

☺常用命令和技巧
1.一些通用命令
cd  显示或改变工作目录
dir, ls  显示目录文件
type  显示文件内容
clear  清理内存变量
clf    清除图形窗口
pack  收集内存碎片、扩大内存空间
clc   清除工作窗
echo  工作窗信息显示开关
hold  图形保持开关
disp  显示变量或文字内容
path  显示搜索目录
save  保存内存变量到指定文件
load  加载指定文件的变量
diary  日志文件命令
quit   退出Matlab
!     调用dos命令


2. 标点
: 多种应用功能
; 区分行,取消行显示等
, 区分列,函数参数分隔符等
()  指定运算过程中的先后次序等
[]  矩阵定义的标志
{}  用于构成单元数组等
.   小数点及域访问等
…  续行符
%  注释标记

=  赋值标记
’   字符串的标志符等

 

 

Help 程序(主题)名
>> help sinh
 SINH   Hyperbolic sine.
   SINH(X) is the hyperbolic sine of the elements of X.
 Overloaded methods
    help sym/sinh.m

>>lookfor complex
……

显示
>>who  %显示当前工作区中的所有变量名
>>whos  %显示当前工作区中的所有变量%名,变量的大小,字节数和类型。

>>disp(x)  %显示x的内容,矩阵或字符串

清除
>>clear (变量名)


存储
>>save (文件名)
调出
>> load (文件名)

>> save
Saving to: matlab.mat
>> load
Loading from: matlab.mat

>> save temp
-将当前系统中的所有变量存入temp.mat;
>> save temp x
-仅存入x变量到temp.mat;
>> save temp x y z
-仅存入x y z变量到temp.mat;
>> load temp
-重新从temp.mat中提出变量。

搜索
>>path %显示目前的搜索路径,可以用File菜单中的Set Path观察和修改路径
管理
what   返回目前目录下的M,MAT,MEX文件列表
dir、 ls  列出目前目录下的所有文件

cd path  改变目前目录为path

pwd、 cd、 chdir   显示目前的工作目录 
退出
>>quit


第2章 数值计算功能

2.1  Matlab的数据类型

1. 变量与表达式
Matlab命令的通常形式
  变量=表达式
>> A=[1,3.0,5.6,sin(2.)]
A =
  1.0000    3.0000    5.6000    0.9093

>> a=[1 3.0 5.6 sin(2.)]
a =
  1.0000    3.0000    5.6000    0.9093
>> sin(pi/2)/3
ans =
0. 3333
>> whos
  Name    Size    Bytes  Class
  A       1x4        32  double array
  a       1x4        32  double array
  ans     1x1         8  double array
Grand total is 9 elements using 70 bytes

2.预定义变量----常量
系统的特殊常量
特殊变量           取值
pi                  
eps                 计算机的最小正数
flops                浮点运算次数
i,j                   i=j=
Inf                  无穷大
NaN                 不定量
Realmin      最小的正浮点数 2^(-1022)
Realmax      最大的浮点数 2^(1023)


>> z1=3+4i
z1 =
   3.0000 + 4.0000i
>> z1=3+4j
z1 =
   3.0000 + 4.0000i

3.显示格式
计算以双精度计算;
数值的有效范围为10e-308~10e308;
显示可以不同的显示格式显示;
缺省情况为短格式(short)显示—若数据为整数,则以整型表示;若为实数,则保留小数点后4位的浮点数表示。
>> x=[3.0 2]
x =
3 2
>> x=[4/3 1.2345e-6]
x =
1.3333    0.0000

>> format long
>> x=[4/3 1.2345e-6]
x =
   1.33333333333333   0.00000123450000

 

>> format short e
>> x=[4/3 1.2345e-6]
x =
1. 3333e+000  1.2345e-006

>> format +
>> x=[4/3 1.2345e-6]
x =
++

short
long
hex
bank
+
short e
long e
short e
short g
long g
rational


4. 字符串
--所有字符串用单引号设定后输入或赋值
>> s='matrix laboratory'
s =
matrix laboratory

--字符串的每个字符(包括空格)均为字符数组的一个元素
>>size(s)   %size命令查看字符数组的维数
ans =
     1    17

--字符串和字符数组(或矩阵)基本上等价
>> s(3)
ans =
t

>> s2=['matlab']
s2 =
matlab

--字符数组的生成
>> s3=char('s','y','m','b','o','l','i','c');
>> s3'
ans =
symbolic

--字符串和数组之间的转换
A. 字符串转换为数值代码
>> double(s3)'
ans =
   115   121   109    98   111   108   105    99

B. 字符数组转换为字符串
 >> cellstr(s3)'
ans =
's'  'y'  'm'   'b'   'o'   'l'   'i'   'c'

C. 数值数组和字符串之间的转换
-num2str    数字转换为字符串
-int2str     整数转换为字符串
-mat2str    矩阵转换为字符串
-str2num   转换字符串为数字
-sprintf     将格式数据写为字符串
-sscanf     在格式控制下读字符串

>> a=[1:5];
>> b=num2str(a);
>> a*2
ans =
     2     4     6     8    10
>> b*2
ans =
  Columns 1 through 11
    98    64    64   100    64    64   102    64    64   104    64
  Columns 12 through 13
    64   106


>> str2num(b)*2
ans =
     2     4     6     8    10

D. 字符串操作
-strcat   链结串
-strvcat  垂直链结串
-strcmp  比较串
-strncmp  比较串的前n个字符
-findstr   在其他串中寻找此串
-strjust    证明字符数组
-strmatch  查找可能匹配的字符串
-strrep    以其他串代替此串
-strtok    寻找串中记号
-upper    转换为大写
-lower    转换为小写
-blanks   生成空串
-deblank  移去串内空串
  
E. 执行字符串
--函数eval实现

n=4;
t='1/(i+j-1)';
a=zeros(n);
for i=1:n
for j=1:n
a(i,j)=eval(t);
end
end
a
a =
   1.0000    0.5000    0.3333    0.2500
   0.5000    0.3333    0.2500    0.2000
   0.3333    0.2500    0.2000    0.1667
   0.2500    0.2000    0.1667    0.1429

>> d='cd';
>> eval(d)
C:\MATLAB6p1\work

F. 一些基本数字转换函数
-hex2num   十六进制转换为双精度数
-hex2dec    十六进制转换为十进制整数
-dec2hex    十进制整数转换为十六进制串
-bin2dec    二进制转换为十进制整数
-dec2bin    十进制整数转换为二进制串
-base2dec   转换B底字符串为十进制整数
-dec2base  转换十进制整数为B底串
-strings    strings函数的帮助


5. 矩阵

6. 单元型变量
一种以任意形式的数组为元素的多维数组
--定义
(1)赋值语句直接定义
(2)由cell函数预先分配存储空间,再对单元元素逐个赋值
>> A=[1, 2; 3, 4];
>> B={1:4, A, 'abcd'}
B =
   [1x4 double]    [2x2 double]    'abcd'
>> c{1,1}=1:4;
>> c{1,2}=A;
>> c{1,3}='abcd';
>> c
c =
    [1x4 double]    [2x2 double]    'abcd'
>> c{2}
ans =
     1     2
     3     4
>> c(2)
ans =
    [2x2 double]

注:
1)单元型变量的元素不是以指针的方式保存。改变其元素原变量矩阵A的值不等于改变变量B的第2个元素的值。
2)单元型变量自身可以嵌套。

>> D={1:4,A,B}
D =
[1x4 double]    [2x2 double]    {1x3 cell}

>> D{3}{3}
ans =
abcd

>> A(1,2)=-10
A =
     1   -10
     3     4

>> c{2}
ans =
     1     2
     3     4

--单元型变量的相关函数
-cell          生成单元型变量
-cellfun   对单元型变量中元素作用的函数
-celldisp   显示单元型变量的内容
-cellplot    图形显示单元型的内容
-num2cell   数值数组转换为单元型变量
-deal       输入输出处理
-cell2struct  单元型变量转换为结构型变量
-struct2cell  结构型变量转换为单元型变量-iscell      判断是否为单元型变量   
-reshape    改变单元数组的结构

>> cellfun('islogical', B)
% 其他函数isreal, isempty, length, ndims等
ans =
     0     0     0

>> celldisp(B)
B{1} =
     1     2     3     4
B{2} =
     1     2
     3     4
B{3} =
abcd

>> size(D)
ans =
     1     3
>> reshape(D,3,1)
ans =
    [1x4 double]
    [2x2 double]
    {1x3 cell  }
>> size(ans)
ans =
     3     1

7. 结构型变量
以指针方式传递数据,将不同数据类型组合在一起的数据类型。

--定义
(1)赋值语句直接定义,以指针操作符‘.’连接结构变量名和属性名;
(2)由struct函数定义
   结构变量名=struct(元素名1, 元素值1,元素名2, 元素值2, …)


>> A.a1='abcd';
>> A.a2=1;
>> A.a3=[1,2,3,4];
>> A
A =
    a1: 'abcd'
    a2: 1
    a3: [1 2 3 4]

>> B=[1,2;3,4];
>> A(2).a1='efgh';
>> A(2).a2=2;
>> A(2).a3=B;
>> A
A =
1x2 struct array with fields:
    a1
    a2
    a3

>> A(1)
ans =
    a1: 'abcd'
    a2: 1
    a3: [1 2 3 4]
>> A(2)
ans =
    a1: 'efgh'
    a2: 2
    a3: [2x2 double]

>> C=struct('c1',1,'c2',B, 'c3','abcd')
C =
    c1: 1
    c2: [2x2 double]
    c3: 'abcd'

>> C.c1=A
C =
    c1: [1x2 struct]
    c2: [2x2 double]
    c3: 'abcd'

>> C.c1(1).a1
ans =
abcd

--结构型变量的相关函数
-struct     创建或转换结构变量
-findnames  得到结构型变量的属性名
-getfield   得到结构型变量的属性值
-setfield   设定结构型变量的属性值
-rmfield   删除结构型变量的属性
-isfield    判断是否为结构型变量的属性
-isstruct   判断是否为结构型变量

>> fieldnames(C)
ans =
    'c1'
    'c2'
    'c3'
>> iscell(ans)
ans =
     1

>> D=getfield(C,'c1')
D =
1x2 struct array with fields:
    a1
    a2
    a3

>> C=setfield(C,'c1',2)
C =
    c1: 2
    c2: [2x2 double]
    c3: 'abcd'

>> C=rmfield(C,'c1')
C =
    c2: [2x2 double]
    c3: 'abcd'

>> isfield(C,'c2')
ans =
     1

>> isstruct(C)
ans =
     1

 


2.2 矩阵的基本运算

I.数和算术表达式
3 –90  0.0001  9.1234  1.6021e-20 
5.02252e23

数学运算符:
+  -  *  /  (右除)   \  (左除)   ^

II.数学函数

基本三角函数 sin cos sec csc tan cot
反三角函数 asin acos asec acsc atan acot
双曲函数 sinh cosh sech csch tanh coth
反双曲函数 asinh acosh asech acsch atanh acoth
指数和对数 exp log Log10 sqrt  
复数运算 abs angle conj real imag 
数值函数 fix floor ceil round rem 
整数函数 lcm gcd    
      


>> x=5.1
x =
    5.1000
>> fix(x)
ans =
5
>> floor(x)
ans =
5
>> ceil(x)
ans =
6
>> round(x)
ans =
5
>> rem(5,3)
ans =
2
>> sin(1+2i)
ans =
3.1658 + 1.9596i

III.矩阵及其元素

1.矩阵输入的基本方法
>> A=[1 2 3]
A =
     1     2     3
>> A=[1 2 3;4 5 6;7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> A=[1, 2, 3;
4,5,6;
7, 8,9]
A =
     1     2     3
     4     5     6
     7     8     9
>>  A=[1, 2, 3
4,5,6
7, 8,9]

A =
     1     2     3
     4     5     6
     7     8     9

2.矩阵元素的存取
Matlab的矩阵元素可以为任何数值表达式。
>> x=[-1.3 sqrt(3) (1+2+3)*4/5]
x =
   -1.3000    1.7321    4.8000

>> A=[1+5i 2+6i]
A =
   1.0000 + 5.0000i   2.0000 + 6.0000i

>> A=[1 2; 3 4]+i*[5 6;7 8]
A =
   1.0000 + 5.0000i   2.0000 + 6.0000i
   3.0000 + 7.0000i   4.0000 + 8.0000i


Matlab的矩阵元素的引用:

>> x=A(1,2)
x =
   2.0000 + 6.0000i

Matlab的矩阵的维数自动扩充:
>> x=[-1.3 sqrt(3) (1+2+3)*4/5]
x =
   -1.3000    1.7321    4.8000
>> x(5)=abs(x(1))
x =
   -1.3000  17321  4.8000   0   1.3000
>> A=[1 2;3 4]
A =
     1     2
     3     4
>> A(3,1)=-1
A =
     1     2
     3     4
-1     0


3.子矩阵的操作
大的矩阵可以通过小的矩阵扩充得到:
>> A=[A;2 1]
A =
     1     2
     3     4
    -1     0
     2     1
>> A=[A, [1 2 3 4]']
A =
     1     2     1
     3     4     2
    -1     0     3
     2     1     4

小的矩阵可以从大的矩阵抽取得到:
A(:)—A的所有元素;
A(:,J)—A的第J列所有元素;
A(J:K)—A(J),A(J+1),…,A(K);
A(:,J:K)—A(:,J),A(:,J+1),…A(:,K);

A(J,:)—A的第J行所有元素;
A(J:K,:)—A(J,:),A(J+1,:),…A(K.:);
A =
     1     2     1
     3     4     2
    -1     0     3
     2     1     4
>> y=A(1:3,:)
y =
     1     2     1
     3     4     2
    -1     0     3

>> x=A(:,1:2)
x =
     1     2
     3     4
    -1     0
     2     1

>> z=A(1:2,2:3)
z =
     2     1
     4     2
4. “:”运算符的用法
用来产生相同增量的向量的方法:
>> t=1:5
t =
     1     2     3     4     5

>> x=pi:-pi/3:0
x =
   3.1416    2.0944    1.0472    0

>> x=(0.0:0.2:1.0)';%‘'’表示转置
>> y=sin(x);  %计算函数值
>> [x y]     %组合出矩阵
ans =
         0         0
    0.2000    0.1987
    0.4000    0.3894
    0.6000    0.5646
    0.8000    0.7174
    1.0000    0.8415


5.生成特殊矩阵的函数
>> rand(1,3)
ans =
    0.9501    0.2311    0.6068

>> rand(3)
ans =
    0.4860    0.4565    0.4447
    0.8913    0.0185    0.6154
    0.7621    0.8214    0.7919

>> eye(2,3)
ans =
     1     0     0
     0     1     0

>> ones(3,2)
ans =
     1     1
     1     1
     1     1

>> randn(3,2)  %标准正态分布
ans =
   -0.4326    0.2877
   -1.6656   -1.1465
    0.1253    1.1909

IV. 矩阵操作
1.矩阵转置
>> A=[1,2,3;4,5,6]
A =
     1     2     3
     4     5     6
>> B=A'
B =
   1     4
     2     5
     3     6

>> C=[1+i,-i;2,1-i]
C =
   1.0000 + 1.0000i        0 - 1.0000i
   2.0000             1.0000 - 1.0000i
>> D=C'  %转置共扼
D =
   1.0000 - 1.0000i   2.0000         
0 + 1.0000i   1.0000 + 1.0000i


2.对角矩阵
diag函数用来生成一个对角矩阵
或提取一个矩阵的对角元素:
>> diag(2:4)
ans =
     2     0     0
     0     3     0
     0     0     4
>> A
A =
     1     2     3
     4     5     6
>> diag(A)
ans =
     1
     5
3.上/下三角矩阵
>> tril(A)
ans =
     1     0     0
     4     5     0

>> triu(A)
ans =
     1     2     3
     0     5     6

>> fliplr(A)
ans =
     3     2     1
     6     5     4

>> flipud(A)
ans =
     4     5     6
     1     2     3


V.矩阵运算
1.加和减
>> A
A =
     1     2     3
     4     5     6
>> B=[1 4 7;2 5 6]
B =
     1     4     7
     2     5     6
>> C=A+B
C =
     2     6    10
     6    10    12

>> D=A-1.0
D =
     0     1     2
     3     4     5

 

2.乘法
>> A
A =
     1     2     3
     4     5     6
>> A'
ans =
     1     4
     2     5
     3     6
>> A*A'
ans =
    14    32
    32    77

3.矩阵除法
标量运算时:
矩阵运算时:
 --inv(A)*B;
 --A*inv(B);

>> A=[1 2 3]
A =
     1     2     3
>> B=[1 2 -3; -2 5 6; 7 2 1]
B =
     1     2    -3
    -2     5     6
     7     2     1
>> A/B
ans =
   -0.1818    0.3636    0.2727

>> B\A'
ans =
    0.2929
    0.4444
    0.0606

 

 

4. 矩阵乘方
>> B
B =
     1     2    -3
    -2     5     6
     7     2     1
>> B^3
ans =
     6    -6   114
   258   309   150
   -98   134   118

5.数组运算
----向量或矩阵间对应元素的运算:
.+  .-   .*   ./   .\   .^

>> x=[1 2 3]
x =
     1     2     3
>> y=[4 5 6]
y =
     4     5     6
>> z=x.*y
z =
     4    10    18
>> z1=x.^y
z1 =
    1    32   729
>> z3=x.^2
z3 =
     1     4     9
>> z4=2.^x
z4 =
     2     4     8

>> [1 2; 3 4]./[2 2; 2 2]
ans =
    0.5000    1.0000
    1.5000    2.0000
>> [1 2; 3 4].\[2 2; 2 2]
ans =
    2.0000    1.0000
    0.6667    0.5000


常见数值问题介绍
一、 线性方程组求解
A*x=b
A为m*m阶矩阵, X和b为m阶向量。
 
>> A=[1,2,3;4,5,6;7,8,0];
>> b=[366;804;351];
>> det(A)
ans =
    27
>> x=inv(A)*b
x =
   25.0000
   22.0000
   99.0000

 

>> x=A\b
x =
   25.0000
   22.0000
   99.0000

广义情况:方程数与未知量数目不等时,线性方程组通常不存在唯一解,但最小二乘解x*是存在唯一。
  
>> A=[1 2 3; 4 5 6; 7 8 0; 2 5 8];
>> b=[366 804 351 514]';
>> x=A\b
x =
  247.9818
 -173.1091
  114.9273

 


二、矩阵函数
I.矩阵基本性质
1)行列式
>> A=rand(3)
A =
    0.9501    0.4860    0.4565
    0.2311    0.8913    0.0185
    0.6068    0.7621    0.8214
>> det(A)
ans =
    0.4289

2)秩
>> rank(A)
ans =
     3

3)迹
>> trace(A)
ans =
    2.6628

4)范数
>> A=[1 1 1;0 0 0;1 1 1]
A =
     1     1     1
     0     0     0
     1     1     1
>> norm(A)   %2-范数
ans =
    2.4495

>> norm(A,inf)   % inf-范数
ans =
     3

>> norm(A,1)    %1-范数
ans =
     2

 

 

II.特征值计算
>> A=[0 1;-1 0]
A =
     0     1
    -1     0
>> eig(A)
ans =
        0 + 1.0000i
        0 - 1.0000i

>> [x,D]=eig(A)
x =
   0.7071           0.7071         
   0 + 0.7071i       0 - 0.7071i

D =
        0 + 1.0000i        0         
        0                  0 - 1.0000i

---A*X=X*D


III.三角分解
>> A=[1 2 3;4 5 6; 7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> [L,U]=lu(A)
L =
    0.1429    1.0000         0
    0.5714    0.5000    1.0000
    1.0000         0         0
U =

    7.0000    8.0000    9.0000
         0    0.8571    1.7143
         0         0    0.0000

>> L*U
ans =
     1     2     3
     4     5     6
     7     8     9
>> [L,U,P]=lu(A)
L =
    1.0000         0         0
    0.1429    1.0000         0
    0.5714    0.5000    1.0000
U =
    7.0000    8.0000    9.0000
         0    0.8571    1.7143
         0         0    0.0000
P =
     0     0     1
     1     0     0
     0     1     0

>> P*A
ans =
     7     8     9
     1     2     3
     4     5     6

 

>> L*U
ans =
     7     8     9
     1     2     3
     4     5     6

IV.正交分解
>> A=[1 2 3; 4 5 6;7 8 9;10 11 12]
A =
     1     2     3
     4     5     6
     7     8     9
    10    11    12

>> [Q,R]=qr(A)
Q =
   -0.0776   -0.8331    0.5456   -0.0478
   -0.3105   -0.4512   -0.6919    0.4704
   -0.5433   -0.0694   -0.2531   -0.7975
   -0.7762    0.3124    0.3994    0.3748


R =
  -12.8841  -14.5916  -16.2992
       0   -1.0413   -2.0826
       0       0    -0.0000
       0       0         0

>> Q*R
ans =
    1.0000    2.0000    3.0000
    4.0000    5.0000    6.0000
    7.0000    8.0000    9.0000
   10.0000   11.0000   12.0000

-- QR分解可用来求超定方程的最小二乘解

>> b=[1;3; 5; 7]
b =
     1
     3
     5
     7

>> x=A\b
Warning: Rank deficient, rank = 2  tol =   1.4594e-014.
x =
    0.5000
         0
    0.1667

>> y=Q'*b
y =
   -9.1586
   -0.3471
    0.0000
   -0.0000
>> x=R\y
Warning: Rank deficient, rank = 2  tol =   1.4594e-014.
x =

    0.5000
         0
    0.1667
三、方程求根
 

>> p=[1 -12 0 25 116]
p =
     1   -12     0    25   116
>> r=roots(p)
r =
  11.7473         
   2.7028         
  -1.2251 + 1.4672i
  -1.2251 - 1.4672i

已知多项式的根,可用poly构造相应的多项式:

>> pp=poly(r)
pp =
    1.0000  -12.0000   -0.0000   25.0000  116.0000

四、曲线拟和
I.一维插值
>> h=1:12;
>> t=[5 8 9 15 25 29 31 30 22 25 27 24];
>> plot(h,t,h,t,'+')
 
interp1插值函数的格式:
Y1=interp1(X,Y,X1,’method’)
X,Y—原数据点;
X1—加细的数据点,或希望得到插值数据的数据点;
Method---‘linear’,  ‘spline’, ‘cubic’;

>> x1=1:0.2:12;
>> y1=interp1(h,t,x1,'spline');
>> plot(h,t,'k+',x1,y1,'k-')
 

II.曲线拟和
设有一组数据点
 
寻找一个多项式n次多项式P*(x):
 

>> x=0:0.1:1;
>> y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
>> p=polyfit(x,y,2)
p =
   -9.8108   20.1293   -0.0317

>> xi=linspace(0,1,100);
>> z=polyval(p,xi);
>> plot(x,y,'ko',xi,z,'r-')
 


>> p=polyfit(x,y,10);
>> xi=linspace(0,1,100);
>> z=polyval(p,xi);
>> plot(x,y,'ko',xi,z,'r-')
 

五、数值积分
sum(x)—输入数组x, 输出为x的和;

cumsum(x)—输入数组x, 输出为x的依次累加和;


trapz(x)—输入数组x, 输出为x按梯形求积公式计算的积分(单位步长);

trapz(x,y)—输入数组x,y, 输出y对x按梯形求积公式计算的积分(步长可以不相等);

quad(‘fun’,a,b)—用辛普森公式(2阶)计算以fun.m的函数在(a,b)上的积分,相对误差为0.001;

quad(‘fun’,a,b,tol)—用辛普森公式(2阶)计算以fun.m的函数在(a,b)上的积分,相对误差为tol;

quad8(‘fun’,a,b,tol)—用辛普森公式(8阶)计算以fun.m的函数在(a,b)上的积分,相对误差为tol;

rand(1,n)—产生n个(0,1)的随机数。

 

计算积分
1)矩形公式和梯形公式:将
>> h=pi/20;
>> x=0:h:pi/2;
>> y=sin(x);
>> z1=sum(y(1:10))*h
z1 =
    0.9194
>> z2=sum(y(2:11))*h
z2 =
    1.0765
>> z=cumsum(y);
>> z11=z(10)*h
z11 =
    0.9194
>> z12=(z(11)-z(1))*h
z12 =
    1.0765
>> z3=trapz(y)*h
z3 =
    0.9979
2)辛普森公式
>> z4=quad('sin',0,pi/2)
z4 =
    1.0000

3)蒙特卡罗方法
>> n=100000;
>> x=rand(1,n);
>> y=sin(x.*pi/2);
>> z=sum(y)*pi/(2*n)
z =
    1.0005

 

 

 

 


六、数据分析
max----最大值
min----最小值
mean----均值
media----中值
std----标准差
sum----元素总和
cumsum----累加和
prod----元素乘积
cumprod----累积
corrcoef----互相关系数矩阵
cov----协方差矩阵
……

>> a=[ 1 3 5 9 3 2 7 6];
>> mean(a)
ans =
    4.5000
>> median(a)
ans =
     4

>> std(a)
ans =
    2.7255
>> cumsum(a)
ans =

     1     4     9    18    21    23    30    36

>> b=[1 4 6 8 2 1 5 0];
>> corrcoef(a,b)
ans =
    1.0000    0.6771
    0.6771    1.0000
>> cov(a,b)
ans =
    7.4286    5.2143
    5.2143    7.9821

 

 

 

 

编程基础

一、 关系运算和IF语句
I. 关系运算和逻辑操作符
关系运算符
<   <=   >    >=   ==   ~=

逻辑操作符
&   |   ~

y=all(x)
若x 为向量,当所有元素非零时y=1,
否则y=0;
若x 为矩阵,all作用于列元素,y为行向量。

y=any(x)
若x 为向量,当有一个元素非零时y=1,
否则y=0;
若x 为矩阵,all作用于列元素,y为行向量。

 

>> A=[1 2; 0 1]
A =
     1     2
     0     1
>> any(A)    %any表示矩阵的每一列中%是否有非零元素
ans =
     1     1

>> all(A)  %all表示矩阵的每一列中
%是否全是非零元素
ans =
     0     1


IF语句:

1)
if <关系表达式>
<语句1>
end

2)
if <关系表达式>
<语句1>
else
<语句2>
end

3)
if <关系表达式1>
<语句1>
elseif <关系表达式1>
<语句2>
……
elseif <关系表达式n>
<语句n>
else
<语句n+1>
end

 


二、for 循环
for <循环参数>=<初值>:<步长>:<终值>
   <语句>
end

>> for i=1:3
for j=1:4
a(i,j)=1/(i+j-1);
end
end
>> format rat
>> a
a =
    1      1/2        1/3       1/4    
   1/2     1/3        1/4        1/5    
   1/3     1/4        1/5        1/6 

二、 while语句
while <关系表达式>
   <语句>
end

求出满足1+2+…+n<100的最大整数n:
>> sum=0;n=0;
>> while sum<100
n=n+1;
sum=sum+n;
end;
>> n=n-1;
>> n
n =
     13   

三、 switch语句
switch <表达式>
case  value1
  <语句1>
case  value2
  <语句2>

otherwise
  <语句n>
end

四、 M文件:文本文件及函数文件
I.文本文件: <M-文件名>.m
fibo.m:

%An M-file to calculate Fibonnacinumbers
f=[1 1]; i=1;
while i<15
  f(i+2)=f(i)+f(i+1);
  i=i+1;
end
plot(f, ‘*k’)

 
II.函数文件
M-文件的第一行包含function;
变量和运算都在文件内部,不在工作间;
文件名为函数名;

function <因变量>=<函数名>(<自变量>)

function a=randint(m,n)
%RANDINT Randomly generated integral %matrix
%randint(m,n) returns an m-by-n matrix %with entries between 0 and 9
a=floor(10*rand(m,n));

>>x=randint(2,3)
x=
  9  6  8
  2  3  5

 


stat.m:
function [mean,stdev]=stat(x)
% STAT Mean and standard deviation
% For a vector x, stat(x) returns the mean %and standard deviation of x
% For a matrix x, stat(x) returns two row %vectors containing, respectively,
% the mean and standard deviation of each %column.
[m,n]=size(x);
if m==1
    m=n;  % handle case of a row vector
end
mean=sum(x)/m;
stdev=sqrt(sum(x.^2)/m-mean.^2);

>> x=[2 4 -7 0 5 -1];
>> [xm,xd]=stat(x)
xm =
    0.5000
xd =
    3.9476

posted @ 2007-09-27 11:54 张生工作室 阅读(2197) | 评论 (3)编辑 收藏

Data for table (train)
RoadNoRoadLineRoadType
D01 S0567-S0042-S0025 D
D02 S1487 D
D03 S0303-S0302 D
D04 S0566 D
D05 S0436-S0438-S0437-S0435 D
D06 S0392-S0394-S0393-S0391 D
D07 S0386-S0388-S0387-S0385 D
D08 S3068-S0617-S0619-S0618-S0616 D
D09 S1279 D
D10 S2057-S0721-S0722-S0720 D
D11 S0070-S2361-S3721 D
D12 S0609-S0608 D
D13 S2633-S0399-S0401-S0400 D
D14 S3321-S2535-S2464 D
D15 S3329-S2534 D
D16 S3506-S0167-S0168 D
D17 S0237-S0239-S0238-S0236-S0540 D
D18 S0668 D
D19 S0180-S0181 D
D20 S2079-S2933-S1919-S1921-S1920 D
D21 S0465-S0467-S0466-S0464 D
D22 S3457 D
D23 S2512 D
D24 S0537-S3580 D
D25 S0526-S0528-S0527-S0525 D
D26 S3045-S0605-S0607 D
D27 S0087-S0088-S0086 D
D28 S0855-S0856-S0854-S0857 D
D29 S0631-S0632-S0630 D
D30 S3874-S1426-S1427 D
D31 S0211-S0539-S0541-S0540 D
D32 S0978-S0497-S0498 D
D33 S1894-S1896-S1895 D
D34 S1104-S0576-S0578-S0577 D
D35 S3010-S0583-S0582 D
D36 S3676-S0427-S0061-S0060 D
D37 S1961-S2817-S0455-S0456 D
D38 S3262-S0622 D
D39 S1956-S0289-S0291 D

query result ( 39 records )

posted @ 2007-09-24 16:29 张生工作室 阅读(944) | 评论 (2)编辑 收藏

     摘要: Data for table (station) StationRoadNo S0001 L421A-L421B- S0002 L027C-L152C-L365C-L395A-L395B-L485C- S0003 L268A-L268B- S0004 L002A-L002B-L018A-L018B-L027C-L038A-L038B...  阅读全文
posted @ 2007-09-24 16:21 张生工作室 阅读(963) | 评论 (1)编辑 收藏

     摘要: Data for table (roadno) RoadNoRoadLineRoadType L001A S0619-S1914-S0388-S0348-S0392-S0429-S0436-S3885-S3612-S0819-S3524-S0820-S3914-S0128-S0710 A L002A S3748-S2160-S1223-S1404-S23...  阅读全文
posted @ 2007-09-24 16:16 张生工作室 阅读(1661) | 评论 (3)编辑 收藏

pointbase - CSDN tag

         
pointbase - CSDN tag

       

     

     
Tomcat5.5下的JNDI的配置
<resource-ref>    <descrtiption>引用资源说明</descrtiption>  <res-ref-name>引用资源的JNDI名</res-ref-name>  <res-type>引用资源的类名</res-type>  <res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理-->  </resource-ref>注意,要把你的驱动拷到common/lib下,我用的是pointbase因此我拷的是pbclient44.jar到了common/lib下(对pointbase感兴趣的读者可以看我的另一篇文章pointbase数据库学习,里面也提到了我为什么是用pointbase数据库作为讲解)。
环境变量---为自己备份
@rem Set BEA Homeset  BEA_HOME=C:\beaFOR %%i IN ("%BEA_HOME%") DO SET BEA_HOME=%%~fsi@rem Set WebLogic Homeset  WL_HOME=C:\bea\weblogic81FOR %%i IN ("%WL_HOME%") DO SET WL_HOME=%%~fsi.@rem set up WebLogic Server‘s class pathset WEBLOGIC_CLASSPATH=%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp.jar;%WL_HOME%\server\lib\weblogic.jar;%WL_HOME%\server\lib\ojdbc14.jar;%WL_HOME%\common\lib\msbase.jar;%WL_HOME%\common\lib\mssqlserver.jar;%WL_HOME%\common\lib\msutil.jar;
J2EE/RI Pointbase数据库远程命令执行漏洞
信息提供:安全公告(或线索)提供热线:51cto.editor@gmail.com漏洞类别:设计错误攻击类型:嵌入恶意代码发布日期:2003-12-16更新日期:2003-12-23受影响系统:Sun JDK 1.4.2_02安全系统:无漏洞报告人:Marc Schoenefeld (marc.schoenefeld@uni-muenster.de)漏洞描述:BUGTRAQ ID: 9230J2EE/RI Pointbase是一个纯JAVA数据库,可以方便的开发JAVA产品。J2EE/RI (Reference Implementation) Pointbase数据库存在安全问题,远程攻击者可以利用这个漏洞通过jdbc插入任意代码或对数据库进行拒绝服务攻击。
Java数据库PointBase 5.5发布
PointBase是一个100%纯用java编写的小型数据库,其体积小(数据库服务器引擎仅1M),客户端文件加起来不到1M,因此经常可以用来作为项目演示。PointBase Micro数据库能运行在FP/PP/PersonalJava和MIDP平台上。PointBase Micro数据库通过UniSync同步服务器能容易地同服务器端PointBase嵌入式数据库和Oracle数据库同步。
配置PointBase
主要文件:只有三个PBclient.jar,pbembedded.jar 和 pbtools.jar 设置pointBase环境变量:setPBEnv.batset PB_HOME=D:\Devs\pointbaseset OLDCP=%CLASSPATH%set CLASSPATH=%PB_HOME%/lib/pbclient.jarset CLASSPATH=%CLASSPATH%;%PB_HOME%/lib/pbembedded.jarset CLASSPATH=%CLASSPATH%;%PB_HOME%/lib/pbtools.jarset CLASSPATH=%CLASSPATH%;%OLDCP% 启动PointBase server:Java com.pointbase.net.netServer参数:/win :窗口模式启动/d :0-3 JDBC显示信息的详细程度。
Workshop8.1中使用ANT自动执行Sql
Tomcat5.5下的jndi的配置
在基于MIDP的应用程序上使用JDBC
本文将讨论如何在MIDP应用程序中使用JDBC,我们使用的产品是DataMirror的PointBase。使用PointBase的UniSync你可以轻松的把本地数据库上的数据和企业数据库的数据进行同步,企业数据库可以是Oracle,SQL Server等。接下来你就可以使用标准的JDBC代码了,首先需要建立数据库连接: Connection con = DriverManager.getConnection("jdbc:pointbase:micro:sample", "PBPUBLIC", "PBPUBLIC"); Con变量代表了数据库连接,使用它我们可以进行数据库的读写操作了。
BEA WebLogic Workshop 8.1学习笔记之一 - 准备篇
<img src=http://dev2dev.bea.com.cn/images/dot6B6B6B.gif width="100%" height="1" alt="" />

 前言

 本文作者用BEA WebLogic Workshop做了一个简单的EJB的开发的例子,并对该例子做了一些Web应用方面的拓展,力图通过这些使用流程教会读者能够上手使用BEA
 WebLogic Workshop。
 

WebLogic Workshop 8.1产品概述

 BEA WebLogic Workshop是一个统一、简化、可扩展的开发环境,能够使所有开发人员(不仅仅是J2EE专家)都能够在
 BEA WebLogic Platform 8.1 上,迅速构建、测试和部署面向服务的企业级应用。
 

WebLogic Workshop 8.1 的独特性表现在:

 · 统一性-- 它是构建所有平台应用的一个IDE,一个框架和一种面向服务的方法,无论是构建
 Web 应用、Web 服务,还是构建门户和集成应用全都适用。

 · 简便性-- 它使所有的开发人员都能够使用 J2EE,而且
WebLogic Workshop
<img src=http://dev2dev.bea.com.cn/images/dot6B6B6B.gif width="100%" height="1" alt="" />

 前言

 本文作者用BEA WebLogic Workshop做了一个简单的EJB的开发的例子,并对该例子做了一些Web应用方面的拓展,力图通过这些使用流程教会读者能够上手使用BEA
 WebLogic Workshop。
 

WebLogic Workshop 8.1产品概述

 BEA WebLogic Workshop是一个统一、简化、可扩展的开发环境,能够使所有开发人员(不仅仅是J2EE专家)都能够在
 BEA WebLogic Platform 8.1 上,迅速构建、测试和部署面向服务的企业级应用。
 

WebLogic Workshop 8.1 的独特性表现在:

 · 统一性-- 它是构建所有平台应用的一个IDE,一个框架和一种面向服务的方法,无论是构建
 Web 应用、Web 服务,还是构建门户和集成应用全都适用。

 · 简便性-- 它使所有的开发人员都能够使用 J2EE,而且
高可靠性移动应用程序-移动数据库和J2ME工具(3)
翻译作者:jungleguo 2003-11-15原文: http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-wireless-p3.htmlJ2ME移动数据库的选择当然PointBase并不是J2ME移动数据库产品的唯一选择。JDBC数据库对于程序来说是最容易的数据库类型。在FP/PP/PersonalJava平台上PointBase Micro 数据库仅用91 KB 存储器足迹就能支持大多数JDBC和SQL功能。PointBase Micro 数据库的MIDP版本提供了一个用浏览器打开的MIDlet数据库控制台。PointBase Micro 数据库通过UniSync 同步服务器能容易地同服务器端PointBase嵌入式数据库和Oracle 数据库同步。

posted @ 2007-09-14 09:25 张生工作室 阅读(511) | 评论 (1)编辑 收藏

     摘要:   /**//*  * ComplexFind.java  *  * Created on 2007年9月10日, 下午8:31  */ import java.io.ByteArrayInputStream; import java.io.ByteArrayO...  阅读全文
posted @ 2007-09-10 22:22 张生工作室 阅读(408) | 评论 (0)编辑 收藏

     摘要:   /**//*  * TextBoxTest.java  *  * Created on 2007年9月9日, 下午12:28  */ import java.io.ByteArrayOutputStream; import java.io.IOExcepti...  阅读全文
posted @ 2007-09-09 21:33 张生工作室 阅读(358) | 评论 (0)编辑 收藏

在J2ME中读取各种格式的文本文件

在J2ME开发过程中,我们经常会把一个文字信息保存在txt格式的文本文件中做为资源.这样便于修改和管理.那么读取它们对于一些刚接触j2me的朋友会有些困难.前几天研究了下,看了一些兄弟的文章和代码,总结出3种方法分别读取Unicode,UTF-8,Unicode big endian格式的文件...本文没考虑读取的效率问题.

这三种方法都能读取中文和英文字符.用来存放的数组长度视文本长度而定....

另外还有一些只能读取英文字符的方法就不列举出来了.

一,读取Unicode格式

    private String read_Uni(String resource)
    {
        byte word_uni[]=new byte[1024];
        String strReturn="";
        InputStream is;
        try
        {
            is=getClass().getResourceAsStream(resource);
            is.read(word_uni);
            is.close();
            StringBuffer stringbuffer = new StringBuffer("");
            for (int j = 0; j < word_uni.length; )
            {
              int k = word_uni[j++]; //注意在这个地方进行了码制的转换
              if (k < 0)
                k += 256;
              int l = word_uni[j++];
              if (l < 0)
                l += 256;
              char c = (char) (k + (l << 8)); //把高位和低位数组装起来
              stringbuffer.append(c);
            }
            strReturn=stringbuffer.toString();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            is=null;
        }
        return strReturn;
    }

二,读取UTF-8格式

    public String read_UTF(String name)
    {
        String strReturn = "";
        InputStream in = null;
        byte[] word_utf= new byte[1024];
        try
        {
          in = getClass().getResourceAsStream(name);
          in.read(word_utf);
          in.close();
          strReturn=new String(word_utf,"UTF-8");
        }
        catch(Exception e)
        {
          System.out.println("readUTF Error:"+e.toString());
        }
        finally
        {
          in = null;
        }
        return strReturn;
    }

三,读取Unicode big endian格式

读取Unicode big endian格式时,采用readChar()方法读取,所以存放时使用char数组存放.

注意:在文本的末尾加上'$'表示文本的结束.

另外代码第10行dis.skip(2)是略过文件头2个字符,如果用microsoft notepad保存的一定存在这两个头字符.

当然,可以使用UltraEdit可以先删掉这两个头字符,然后使用新建文件,复制粘贴,保存为其它格式.这样两个头字符就没了..

    private String read_Uni_b_e(String resource)
    {
        char word_uni_b_e[]=new char[1024];
        String strReturn="";
        DataInputStream dis;
        try
        {
            dis=new DataInputStream(getClass().getResourceAsStream(resource));
            int counter=0;
            dis.skip(2);
            char temp;
            while(true)
            {
                temp=dis.readChar();
                if(temp=='$')
                    break;
                word_uni_b_e[counter++]=temp;
            }
            dis.close();
            strReturn=String.valueOf(word_uni_b_e,0,counter);
        }
        catch(Exception e)
        {
            System.out.println("read_Uni_b_e error!"+e.getMessage());
        }
        finally
        {
            dis=null;
        }
        return strReturn;
    }

以上3种方法测试平台:

Operation System: Microsoft Windows XP Professional Service Pack 1

Emulator: Sun Wireless ToolKit 2.2 beta DefaultColorPhone

posted @ 2007-09-09 19:48 张生工作室 阅读(229) | 评论 (0)编辑 收藏

J2ME平台下文本阅读器的实现

J2ME平台下文本阅读器的实现

摘要:本文利用J2ME技术开发了一个文本阅读器,实现了手机对文本文件的显示,给出了该程序的实现代码,并对其关键技术进行了详细阐述。
关键字:   J2ME 文本阅读器 Java 手机

0引言
    随着通讯技术的发展及手机的普及 ,人们正在不断地给手机增加新的功能 ,其中 ,使手机实现一般只有 PC机才具有的功能——下载各种程序并运行 ,是目前手机发展的一个重要方向。为此 ,人们提出了各种各样的解决方案 ,其中基于 JAVA的 J2 ME方案无疑是最引人注目的。
    本文通过J2ME开发一个文本阅读器,该程序可下载到手机上,随时随地的进行阅读,这样就可以通过这种方式开发一些学习软件,使手机用户可有一个随身学习的工具书。由于J2ME不可以对手机中的文件进行读写,所以在开发本程序时,只能在程序打包时把文本文件作为资源文件加入到J2ME发布程序中。如果想读写手机上的文件,则要使用各手机商家提供的特定开发平台和专用的类来开发,下面就文本阅读器的关键技术进行说明。
1 J2ME文本阅读器中的文本格式
    J2ME中文本文件的格式,为了便于程序的开发和在运行中的读写处理,对要处理的文本文件要进行一定格式的整理。本程序中的文本要求用纯文本即可,每章为一个独立的文件,每一章中均可为多段,在文本中加入的空格和各种符号都可在阅读时如实的显示出来。文件写好后将其存入相应项目文件夹下的res文件夹中,如本文中的阅读器的项目名为test,则可将文本文件存入test\res文件夹下。
    本系统要阅读三章内容,所以制作了三个文本文件,分别命名为test1.txt、test2.txt、test3.txt,将三个文件存入test\res文件夹中,到此文本内容准备完成。

2读取文本文件的主要技术问题
    在J2ME中如何读取文本文件的内容,在本系统中写了一个函数用来读取指定的文本文件,文本文件做为参数传给该函数,该函数的返回值为字符串类型,将文件的内容做为一个完整的字符串返回。在读取文件内容时用到的主要技术,使用InputStream类定义一个输入字节流对象in,使用 ByteArrayOutputStream类定义一个内存数组输出字节流对象s,通过输入对象的in.read()方法来读取一个字节,将读出的字节通过s.write( )方法加入到s中,再使用s.toString()方法将内存转为字符串返回。读取文本文件的函数定义如下:
    private String myReadLine (String testFileName) {
        //函数头定义了函数的参数为文件名组成的字符串,返回值为一个字符串。
  InputStream  in = this.getClass().getResourceAsStream(testFileName);
        //由文件名参数来定义一个输入流对象变量in
    ByteArrayOutputStream  s;
    s = new ByteArrayOutputStream();  //产生内存数组输出字节流对象变量S
    try{
        int ch=0;
        ch=in.read();  //由输入流对象变量in的read方法以字节为单位来读取文件的内容,读取到文件尾时的值为-1。  
        while ( ch!= -1 ) {
          //如果未读到文件尾把读取的内容写入S变量中,并读取下一字节内容
                s.write( ch );
                ch=in.read();
            }
            in.close();  //关闭输入流对象。
        }  catch (IOException ioe){
           System.out.println(ioe.toString());
        }
        String str = s.toString();  //将S变量转为字符串
        try{
            s.close();  //关闭输出流对象
        }  catch (IOException ioe){
           System.out.println(ioe.toString());
        }
        return  str.trim();  //返回文件中的内容字符串
    }

3 将文本文件内容显示出来的技术
    通过Form类定义一个表单对象f,通过对象的f.append()的方法将读取文本文件返回的字符串内容加入到表单对象中,为了该表单内容在阅读完之后可以返回上一级显示界面,通过f.addCommand()方法在表单中加入一个按钮对象,并通过f.setCommandListener(this)方法注册CommandListener高级事件处理,这样当选择按钮时即可调用CommandListener 高级事件接口类中的commandAction()函数,在该函数中判断是哪个按钮被选中,通过该函数中的代码来决定处理流程。最后通过Display类的Display.setCurrent()方法将含有文件内容的表单显示在手机屏幕上。处理代码如下:
    Form f=new Form("超级阅读"); //创建一个Form对象f
    strContent=myReadLine ("/test1.txt"); //读取test1.txt文件中的内容返回字符串
    f.append(strContent);  //将文本文件的内容加入到f对象中
  f.addCommand(exitCom);  //将退出按钮选项加入到f对象中
f.setCommandListener(this);  //注册高级事件处理
    display.setCurrent(f);  //将f对象显示到手机屏幕上

4 阅读器中的菜单设计技术
    本阅读器菜单结构分两级,一级菜单显示各章的标题,通过选择某一标题选项进入该章进行内容阅读,在章内容界面中设置二级菜单选项,二级菜单中只有一个选项即是返回选项,选中该选项后,则回到上一级,可重新选择章标题,进入新一章内容进行阅读。一级菜单通过List类来建立,首先产生一个List类的对象l,通过l.append("第一章",null)方法在l对象中加入一条选项,用同样的方法可加入多条选项,只要将第一章改为第二章、第三章等,可产生一个有多选项的l对象,通过l.addCommand(exitCommand)方法在l对象中加入一个按钮,作为退出按钮选项,通过l.setCommandListener(this)注册高级事件处理机制,通过该高级事件的注册在操作过程中选中某一选项时,系统自动调用commandAction()函数,并将选中的选项做为参数传递给该函数,在函数中判断选中的是哪一个选项,进行不同的流程处理。最后通过Display类的Display.setCurrent(l)方法将第一级菜单界面显示在手机屏幕上。一级菜单界面的定义如下:
List l=new List("超级阅读--小说",Choice.IMPLICIT);  //定义一个List对象l
  l.addCommand(exitCommand);  //在对象l中加入退出按钮
  l.append("第一章",null);  //加入第一章选项标题
l.append("第二章",null);  //加入第二章选项标题
l.append("第三章",null);  //加入第三章选项标题
l.setCommandListener(this);    //注册高级事件处理机制
  display.setCurrent(l);    //将界面显示在手机屏幕上
    在阅读器的菜单设计中,无论是选择了章标题选项,还是选择了一级菜单中的退出或者是阅读章内容界面中的退出选项,都将进入commandAction()函数中,在该函数中进行相应判断进入不同的处理流程代码。
    主要程序代码如下:
public void commandAction(Command c,Displayable s)
  {
     if(c==exitCommand)
       {//如果是一级菜单的退出按钮选项则退出本系统
      notifyDestroyed();
          }
else if (c==exitCom)
          {//若是阅读章内容中的退出按钮选项则退出阅读内容界面返回一级菜单界面
       startApp();
       resumeRequest();
          }
else  
          {//如果选择的不是任何一个退出按钮,则进行选择章标题的判断
              String strContent;
            List tmp=(List)s;  //将参数s进行类型转换,转换为List类对象
            switch(tmp.getSelectedIndex())  
//判断选中的是哪一章标题则进行该章内容阅读界面
           {   case 0:
                        //第一章选中打开test1.txt
                    Form f=new Form("超级阅读");
                        strContent=myReadLine ("/test1.txt");
                        f.append(strContent);
                   f.addCommand(exitCom);
                   f.setCommandListener(this);
                   display.setCurrent(f);
                break;
            case 1:
                        //第二章选中打开test2.txt方法同第一章(略)
                  case 2:
                      //第三章选中打开test3.txt,如果还有更多章可按此方法再增加
                    
           }  // switch 多分支结构语句结束
         }  //if  选择结构结束
  } // commandAction函数结束

posted @ 2007-09-09 19:25 张生工作室 阅读(319) | 评论 (0)编辑 收藏