??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成在线播放,亚洲AV无码专区在线观看成人
,亚洲综合精品成人 http://m.tkk7.com/wqnashqu/category/24624.html工作日志…?
<!-- SiteSearch Google -->
<form method="get" action="http://www.google.com/custom" target="_top">
<table border="0" background ="http://m.tkk7.com/images/blogjava_net/wqnashqu/yan.gif">
<tr><td nowrap="nowrap" valign="top" align="left" height="32">
</td>
<td nowrap="nowrap">
<input type="hidden" name="domains" value="codesearch.google.com;m.tkk7.com;www.ibm.com"></input>
<label for="sbi" style="display: none">输入您的搜烦字词</label>
<input type="text" name="q" size="26" maxlength="255" value="" id="sbi"></input>
<label for="sbb" style="display: none">提交搜烦表单</label>
<input type="submit" name="sa" value="Google 搜烦" id="sbb"></input>
</td></tr>
<tr>
<td> </td>
<td nowrap="nowrap">
<table>
<tr>
<td>
<input type="radio" name="sitesearch" value="" checked id="ss0"></input>
<label for="ss0" title="搜烦|络"><font size="-1" ">Web</font></label></td>
<td>
<input type="radio" name="sitesearch" value="codesearch.google.com" id="ss1"></input>
<label for="ss1" title="搜烦 codesearch.google.com"><font size="-1" >codesearch.google.com</font></label></td>
</tr>
<tr>
<td>
<input type="radio" name="sitesearch" value="m.tkk7.com" id="ss2"></input>
<label for="ss2" title="搜烦 m.tkk7.com"><font size="-1" >m.tkk7.com</font></label></td>
<td>
<input type="radio" name="sitesearch" value="www.ibm.com" id="ss3"></input>
<label for="ss3" title="搜烦 www.ibm.com"><font size="-1" >www.ibm.com</font></label></td>
</tr>
</table>
<input type="hidden" name="client" value="pub-5842524610105352"></input>
<input type="hidden" name="forid" value="1"></input>
<input type="hidden" name="ie" value="GB2312"></input>
<input type="hidden" name="oe" value="GB2312"></input>
<input type="hidden" name="cof" value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;LH:45;LW:166;L:http://m.tkk7.com/images/logo.gif;S:http://m.tkk7.com/wqnashqu;FORID:1"></input>
<input type="hidden" name="hl" value="zh_CN"></input>
</td></tr></table>
</form>
<!-- SiteSearch Google --> zh-cn Sun, 11 Nov 2007 18:20:09 GMT Sun, 11 Nov 2007 18:20:09 GMT 60 Europa myeclipse matisse http://m.tkk7.com/wqnashqu/archive/2007/11/11/159733.html曲强 Nicky 曲强 Nicky Sun, 11 Nov 2007 07:11:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/11/11/159733.html http://m.tkk7.com/wqnashqu/comments/159733.html http://m.tkk7.com/wqnashqu/archive/2007/11/11/159733.html#Feedback 6 http://m.tkk7.com/wqnashqu/comments/commentRss/159733.html http://m.tkk7.com/wqnashqu/services/trackbacks/159733.html myeclipse中集成的derby和tomcat也大大加速了服务器的q接和部|Ԍ调试{。至于db视图个h使用oracle 阅读全文 ]]> Struts Review http://m.tkk7.com/wqnashqu/archive/2007/10/07/150860.html曲强 Nicky 曲强 Nicky Sun, 07 Oct 2007 08:55:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/10/07/150860.html http://m.tkk7.com/wqnashqu/comments/150860.html http://m.tkk7.com/wqnashqu/archive/2007/10/07/150860.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/150860.html http://m.tkk7.com/wqnashqu/services/trackbacks/150860.html 阅读全文 ]]> JFx~~~~builder http://m.tkk7.com/wqnashqu/archive/2007/06/02/121561.html曲强 Nicky 曲强 Nicky Sat, 02 Jun 2007 15:16:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/06/02/121561.html http://m.tkk7.com/wqnashqu/comments/121561.html http://m.tkk7.com/wqnashqu/archive/2007/06/02/121561.html#Feedback 7 http://m.tkk7.com/wqnashqu/comments/commentRss/121561.html http://m.tkk7.com/wqnashqu/services/trackbacks/121561.html 里。我评论的前两条是表扬google... 阅读全文 ]]> JNDI~基础 http://m.tkk7.com/wqnashqu/archive/2007/05/14/117461.html曲强 Nicky 曲强 Nicky Mon, 14 May 2007 15:33:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/05/14/117461.html http://m.tkk7.com/wqnashqu/comments/117461.html http://m.tkk7.com/wqnashqu/archive/2007/05/14/117461.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/117461.html http://m.tkk7.com/wqnashqu/services/trackbacks/117461.html 阅读全文 ]]> 标准字符集~ http://m.tkk7.com/wqnashqu/archive/2007/05/06/115613.html曲强 Nicky 曲强 Nicky Sun, 06 May 2007 11:50:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/05/06/115613.html http://m.tkk7.com/wqnashqu/comments/115613.html http://m.tkk7.com/wqnashqu/archive/2007/05/06/115613.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/115613.html http://m.tkk7.com/wqnashqu/services/trackbacks/115613.html 阅读全文 ]]> ANT http://m.tkk7.com/wqnashqu/archive/2007/04/19/111946.html曲强 Nicky 曲强 Nicky Thu, 19 Apr 2007 06:56:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/19/111946.html http://m.tkk7.com/wqnashqu/comments/111946.html http://m.tkk7.com/wqnashqu/archive/2007/04/19/111946.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/111946.html http://m.tkk7.com/wqnashqu/services/trackbacks/111946.html 阅读全文 ]]> ANT十五大最佛_?转蝲)--o'reilly http://m.tkk7.com/wqnashqu/archive/2007/04/19/111941.html曲强 Nicky 曲强 Nicky Thu, 19 Apr 2007 06:45:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/19/111941.html http://m.tkk7.com/wqnashqu/comments/111941.html http://m.tkk7.com/wqnashqu/archive/2007/04/19/111941.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/111941.html http://m.tkk7.com/wqnashqu/services/trackbacks/111941.html 阅读全文 ]]> 利用google api写的程序 http://m.tkk7.com/wqnashqu/archive/2007/04/14/110645.html曲强 Nicky 曲强 Nicky Sat, 14 Apr 2007 07:22:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/14/110645.html http://m.tkk7.com/wqnashqu/comments/110645.html http://m.tkk7.com/wqnashqu/archive/2007/04/14/110645.html#Feedback 1 http://m.tkk7.com/wqnashqu/comments/commentRss/110645.html http://m.tkk7.com/wqnashqu/services/trackbacks/110645.html 阅读全文 ]]> java与元数据 http://m.tkk7.com/wqnashqu/archive/2007/04/12/110302.html曲强 Nicky 曲强 Nicky Thu, 12 Apr 2007 15:58:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/12/110302.html http://m.tkk7.com/wqnashqu/comments/110302.html http://m.tkk7.com/wqnashqu/archive/2007/04/12/110302.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/110302.html http://m.tkk7.com/wqnashqu/services/trackbacks/110302.html 阅读全文 ]]> java.security http://m.tkk7.com/wqnashqu/archive/2007/04/11/109936.html曲强 Nicky 曲强 Nicky Wed, 11 Apr 2007 08:35:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/11/109936.html http://m.tkk7.com/wqnashqu/comments/109936.html http://m.tkk7.com/wqnashqu/archive/2007/04/11/109936.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/109936.html http://m.tkk7.com/wqnashqu/services/trackbacks/109936.html
String lineSeparator = (String) java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction( " line.separator " ));
具体参考java.io.BufferedWriter的源代码可以找C面这行代码?DriverManager里也?br>
1 private static void loadInitialDrivers() { 2 String drivers; 3 4 try { 5 drivers = (String) java.security.AccessController 6 .doPrivileged( new sun.security.action.GetPropertyAction( 7 " jdbc.drivers " )); 8 } catch (Exception ex) { 9 drivers = null ; 10 } 11 println( " DriverManager.initialize: jdbc.drivers = " + drivers); 12 if (drivers == null ) { 13 return ; 14 } 15 while (drivers.length() != 0 ) { 16 int x = drivers.indexOf( ' : ' ); 17 String driver; 18 if (x < 0 ) { 19 driver = drivers; 20 drivers = "" ; 21 } else { 22 driver = drivers.substring( 0 , x); 23 drivers = drivers.substring(x + 1 ); 24 } 25 if (driver.length() == 0 ) { 26 continue ; 27 } 28 try { 29 println( " DriverManager.Initialize: loading " + driver); 30 Class.forName(driver, true , ClassLoader.getSystemClassLoader()); 31 } catch (Exception ex) { 32 println( " DriverManager.Initialize: load failed: " + ex); 33 } 34 } 35 }
sun.security.action.GetPropertyAction() hasn't been publiced.actually and exactly,it's not be doced,which reflects that sun doesn't surport us to use these class or method which is lower class,usually, we use the classes api tells us is proier and maybe has called these undoc class but usually for us ,it's not necessary.so in the program of us or even others ,we could and i think it's really better for us to neglect them which u can find out in the jar file of rt.jar. ]]> Java性能优化Q摘录) http://m.tkk7.com/wqnashqu/archive/2007/04/09/109345.html曲强 Nicky 曲强 Nicky Mon, 09 Apr 2007 03:12:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/09/109345.html http://m.tkk7.com/wqnashqu/comments/109345.html http://m.tkk7.com/wqnashqu/archive/2007/04/09/109345.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/109345.html http://m.tkk7.com/wqnashqu/services/trackbacks/109345.html 阅读全文 ]]> JAVA ONLINE目 http://m.tkk7.com/wqnashqu/archive/2007/04/09/109342.html曲强 Nicky 曲强 Nicky Mon, 09 Apr 2007 03:06:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/09/109342.html http://m.tkk7.com/wqnashqu/comments/109342.html http://m.tkk7.com/wqnashqu/archive/2007/04/09/109342.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/109342.html http://m.tkk7.com/wqnashqu/services/trackbacks/109342.html 2.数学q算异常,如除0的情?数组界异常,字符串访问过?
3.数据库检索记?l果记录行数状况的处?
4.画面昄目的确?
5.画面昄目辑ֈ上限时情늚处理.
6.pȝ出错的时?异常信息是否正确.
7.数据库连?游标的处?
8.数学q算?数据_ֺ的处?
]]> JNDI http://m.tkk7.com/wqnashqu/archive/2007/04/08/109234.html曲强 Nicky 曲强 Nicky Sun, 08 Apr 2007 07:10:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/08/109234.html http://m.tkk7.com/wqnashqu/comments/109234.html http://m.tkk7.com/wqnashqu/archive/2007/04/08/109234.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/109234.html http://m.tkk7.com/wqnashqu/services/trackbacks/109234.html
A directory is typically used to associate attributes with objects.
A person object, for example, can have a number of attributes, such as
the person's surname, fisrtName,telephone numbers, electronic mail address and so on. Using JNDI, to retrieve the
email address of a person object, the code looks as follows.
1 Attribute personAttribute = directory.getAttributes(personName).get( " email " ); 2 String email = (String)personAttribute.get();
(Recently,finding that blogjava can help us format our code,that's perfect,but if can max the editor area which will enhance the function and coursely be better:).) An intuitive model for the Java programmer is to be able to lookup
objects like printers and databases from the naming/directory service.
Using JNDI, to lookup a printer object, the code looks as follows.
(it's important and most used)
1 Printer printer = (Printer)namespace.lookup(printerName); 2 printer.print(document);
]]> Write a Log && Use the Properties http://m.tkk7.com/wqnashqu/archive/2007/04/05/108613.html曲强 Nicky 曲强 Nicky Thu, 05 Apr 2007 02:01:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/05/108613.html http://m.tkk7.com/wqnashqu/comments/108613.html http://m.tkk7.com/wqnashqu/archive/2007/04/05/108613.html#Feedback 1 http://m.tkk7.com/wqnashqu/comments/commentRss/108613.html http://m.tkk7.com/wqnashqu/services/trackbacks/108613.html //*******************The Log class import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.uitl.Date; import java.text.DateFormat;
public class Log{ private static final String filePath = PropertyReader.getResource("Log_File_Path");//Supposing we have define in the last ProperyReader class and the file public static final String EXCEPTION = "Exception"; public static final String CREATE_STAFF = "Create Staff"; public static final String EDIT_STAFF = "Edit Staff"; public static final String DELETE_STAFF = "Delete Staff"; public static final String RECORD_HAS_EXIST = "Record Has Exist";
public static void log(String msg_type, Exception e){ StringBuffer errMsg = new StringBuffer(e.toString); for(int i=0;i<e.getStackTrace().length;i++){ errMsg.append("\n\t at"); errMsg.append(e.getStackTrace()[i].toString); } log(msg_type,errMsg.toString()); OptionPanel.showErrMsg("Sorry,System may have an error \n System will exit"); System.exit(-1); }
public static void log(String msg.type,Staff staff){ String msg = null; if(msg_type == CREATE_STAFF){ msg = staff.toString() + "has benn created"; }else if(msg_type == EDIT_STAFF){ msg = staff.toString() + "has been Changed"; }else if(msg_type == DELETE_STAFF){ msg = staff.toString() + "has been Deleted"; }else if(msg_type == RECORD_HAS_EXIST){ msg = staff.toString() + "has exist in the database"; } log(msg_type,msg); }
private static void log(String msg_type,String msg){ BufferedWriter out = null; DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); try{ out = new BufferedWriter(new FileWriter(getLogFilePath(),true));//如果?trueQ则字节写入文件末֤Q而不是写入文件开始处 out.write("["+df.format(new Date()) + "] <" + msg_type + "> :" + msg); out.newline(); out.newline(); }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(out!=null){ out.close(); } }catch(IOException e){ e.printStackTrace(); } } }
private static String getLogFilePath(){ File logDir = new File(filePath); if(!logDir.exists()){ logDir.mkdir(); } int i = 1; String fileName = filePath + "log_"; File file = new File(fileName + i + ".txt"); while(file.exists() && file.length() > 30000L) { i++; file = new File(fileName + i + ".txt"); } return fileName + i + ".txt" } }
//*****************************The OptionPanel Dialog Class for the Log Class import javax.swing.JOptionPane;
public class OptionPanel { private static final String appTitle = PropertyReader.getResource("App_Title");//suposing the file has been established and the property app-title stands for the name of application private static final MainFrame frame = MainFrame.getMainFrame();
public static void showWarningMsg(String msg){ JOptionPane.showMessageDialog(frame,msg,appTitle,JOptionPane.WARNING_MESSAGE); } public static void showErrMsg(String msg){ JOptionPane.showMessageDialog(frame,msg,appTitle,JOptionPane.Error_MESSAGE); } public static int showConfirmMsg(String msg){ return JOptionPane.showConfirmDialog(frame,msg,appTitle,JOptionPane.YES_NO_OPTON,JOptionPane.QUESTION_MESSAGE); } }
]]>A class to read the Properties http://m.tkk7.com/wqnashqu/archive/2007/04/05/108572.html曲强 Nicky 曲强 Nicky Thu, 05 Apr 2007 00:13:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/05/108572.html http://m.tkk7.com/wqnashqu/comments/108572.html http://m.tkk7.com/wqnashqu/archive/2007/04/05/108572.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/108572.html http://m.tkk7.com/wqnashqu/services/trackbacks/108572.html In a project, we can write a class to read the properties.As following, import java.io.InputStream; import java.io.IOException; import java.util.Properties;
public class PropertyReader{ private static Properties property = null; static{ InputSteam stream = null; try{ stream=PropertyReader.class.getResourceAsStream("/resource/properties.properties"); property = new Properties(); property.load(stream); }catch(IOException e){ e.printStackTrace(); }finally{ if(stream != null){ try{ stream.close(); }catch(IOException e){ e.printStackTrace(); } } } } public static String getResource(String key){ if(property == null){ return null;// init error; } return property.getProperty(key); } }
]]> Properties http://m.tkk7.com/wqnashqu/archive/2007/04/04/108533.html曲强 Nicky 曲强 Nicky Wed, 04 Apr 2007 13:32:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/04/04/108533.html http://m.tkk7.com/wqnashqu/comments/108533.html http://m.tkk7.com/wqnashqu/archive/2007/04/04/108533.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/108533.html http://m.tkk7.com/wqnashqu/services/trackbacks/108533.html List a class to use the title Properties. import java.util.Properties; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FirstDayTestProperties { public static void main(String[] args) throws Exception{ Properties ProTest = new Properties(); String fileName="PropertiesTest.properties"; try{ ProTest.setProperty("lastDir","C:\\PropertyTest"); ProTest.store(new FileOutputStream(fileName),null); }catch(IOException e){ e.printStackTrace(); } try{ FileInputStream inStream=new FileInputStream(fileName); ProTest.load(inStream); ProTest.list(System.out); }catch(FileNotFoundException e){ e.printStackTrace(); } } } The class I just write now without any testing,but i think it seems no errors:).Share. ]]>The JS route. 2nd function area http://m.tkk7.com/wqnashqu/archive/2007/02/15/100013.html曲强 Nicky 曲强 Nicky Thu, 15 Feb 2007 15:36:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/02/15/100013.html http://m.tkk7.com/wqnashqu/comments/100013.html http://m.tkk7.com/wqnashqu/archive/2007/02/15/100013.html#Feedback 1 http://m.tkk7.com/wqnashqu/comments/commentRss/100013.html http://m.tkk7.com/wqnashqu/services/trackbacks/100013.html 阅读全文 ]]> Drag a JS http://m.tkk7.com/wqnashqu/archive/2007/01/29/96512.html曲强 Nicky 曲强 Nicky Mon, 29 Jan 2007 06:42:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/01/29/96512.html http://m.tkk7.com/wqnashqu/comments/96512.html http://m.tkk7.com/wqnashqu/archive/2007/01/29/96512.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/96512.html http://m.tkk7.com/wqnashqu/services/trackbacks/96512.html <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>拖拽Demo</title> <style type="text/CSS"> body { margin:0px; } #aim { position:absolute; width:200px; height:30px; border:1px solid #666666; background-color:#FFCCCC; } #sourceLayer, #cloneLayer { position:absolute; width:300px; height:50px; border:1px solid #666666; background-color:#CCCCCC; cursor:move; } .docked { display:none; filter:alpha(opacity=100); } .actived { display:block; filter:alpha(opacity=70); } </style> </head> <body > <div id="aim">locate</div> <div id="sourceLayer" unselectable="off"><img src="http://www.baidu.com/img/logo.gif" alt="Drag Demo">Source of the demo</div> <div id="cloneLayer" class="docked" unselectable="off"></div> <script type="text/javascript" language="javascript"> var aim; var sourceLayer; var cloneLayer; var aimX; var aimY; var orgnX; var orgnY; var draging = false; var offsetX = 0; var offsetY = 0; var back; var thisX ; var thisY ; var time ; var stepX ; var stepY ; function getLayer(inAim,inSource,inClone) { aim = document.getElementById(inAim); sourceLayer = document.getElementById(inSource); cloneLayer = document.getElementById(inClone); } function initDrag(initAimX,initAimY,initOrgnX,initOrgnY) { aimX = initAimX; aimY = initAimY; orgnX = initOrgnX; orgnY = initOrgnY; aim.style.pixelLeft = aimX; aim.style.pixelTop = aimY; sourceLayer.style.pixelLeft = orgnX; sourceLayer.style.pixelTop = orgnY; cloneLayer.style.pixelLeft = orgnX; cloneLayer.style.pixelTop = orgnY; } function BeforeDrag() { if (event.button != 1) { return; } cloneLayer.innerHTML = sourceLayer.innerHTML; ?br> offsetX = document.body.scrollLeft + event.clientX - sourceLayer.style.pixelLeft; offsetY = document.body.scrollTop + event.clientY - sourceLayer.style.pixelTop; cloneLayer.className = "actived"; draging = true; } function OnDrag() { if(!draging) { return; } event.returnValue = false; cloneLayer.style.pixelLeft = document.body.scrollLeft + event.clientX - offsetX; cloneLayer.style.pixelTop = document.body.scrollTop + event.clientY - offsetY; } function EndDrag() { if (event.button != 1) { return; } draging = false; if (event.clientX >= aim.style.pixelLeft && event.clientX <= (aim.style.pixelLeft + aim.offsetWidth) && event.clientY >= aim.style.pixelTop && event.clientY <= (aim.style.pixelTop + aim.offsetHeight)) { sourceLayer.style.pixelLeft = aim.style.pixelLeft; sourceLayer.style.pixelTop = aim.style.pixelTop; cloneLayer.className = "docked"; } else { thisX = cloneLayer.style.pixelLeft; thisY = cloneLayer.style.pixelTop; offSetX = Math.abs(thisX - orgnX); offSetY = Math.abs(thisY - orgnY); time = 500; stepX = Math.floor((offSetX/time)*20); stepY = Math.floor((offSetY/time)*20); if(stepX == 0) stepX = 2; if(stepY == 0) stepY = 2; moveStart(); } } function moveStart() { back = setInterval("MoveLayer();",15); } function MoveLayer() { if(cloneLayer.style.pixelLeft <= orgnX && cloneLayer.style.pixelTop <= orgnY) { cloneLayer.style.pixelLeft += stepX; cloneLayer.style.pixelTop += stepY; if(cloneLayer.style.pixelLeft > orgnX) { stepX = 1; } if(cloneLayer.style.pixelTop > orgnY) { stepY = 1; } //if the coordinate of X Y are same if(cloneLayer.style.pixelLeft == orgnX) { stepX = 0; } if(cloneLayer.style.pixelTop == orgnY) { stepY = 0; } if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY) { EndMove(); } } //locate to the downleft of the object else if(cloneLayer.style.pixelLeft <= orgnX && cloneLayer.style.pixelTop >= orgnY) { cloneLayer.style.pixelLeft += stepX; cloneLayer.style.pixelTop -= stepY; if(cloneLayer.style.pixelLeft > orgnX) { stepX = 1; } if(cloneLayer.style.pixelTop < orgnY) { stepY = 1; } if(cloneLayer.style.pixelLeft == orgnX) { stepX = 0; } if(cloneLayer.style.pixelTop == orgnY) { stepY = 0; } if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY) { EndMove(); } } else if(cloneLayer.style.pixelLeft >= orgnX && cloneLayer.style.pixelTop <= orgnY) { cloneLayer.style.pixelLeft -= stepX; cloneLayer.style.pixelTop += stepY; if(cloneLayer.style.pixelLeft < orgnX) { stepX = 1; } if(cloneLayer.style.pixelTop > orgnY) { stepY = 1; } if(cloneLayer.style.pixelLeft == orgnX) { stepX = 0; } if(cloneLayer.style.pixelTop == orgnY) { stepY = 0; } if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY) { EndMove(); } } //locate to the right of the object else if(cloneLayer.style.pixelLeft >= orgnX && cloneLayer.style.pixelTop >= orgnY) { cloneLayer.style.pixelLeft -= stepX; cloneLayer.style.pixelTop -= stepY; if(cloneLayer.style.pixelLeft < orgnX) { stepX = 1; } if(cloneLayer.style.pixelTop < orgnY) { stepY = 1; } if(cloneLayer.style.pixelLeft == orgnX) { stepX = 0; } if(cloneLayer.style.pixelTop == orgnY) { stepY = 0; } if(cloneLayer.style.pixelLeft == orgnX && cloneLayer.style.pixelTop == orgnY) { EndMove(); } } //to the design else { EndMove(); } } //stop and then back to the state ()carton function EndMove() { sourceLayer.style.pixelLeft = orgnX; sourceLayer.style.pixelTop = orgnY; cloneLayer.style.pixelLeft = orgnX; cloneLayer.style.pixelTop = orgnY; cloneLayer.className = "docked"; clearInterval(back); } //Main function of this demo function startDraging(inAim,inSource,inClone,initAimX,initAimY,initOrgnX,initOrgnY) { getLayer(inAim,inSource,inClone) initDrag(initAimX,initAimY,initOrgnX,initOrgnY); sourceLayer.onmousedown = BeforeDrag; document.onmousemove = OnDrag; //if we use cloneLayer,then the content will be draged ,and well a bug cloneLayer.onmouseup = EndDrag; } //transfer startDraging("aim","sourceLayer","cloneLayer",600,500,50,50); //--> </script> </body> </html> ]]> The JS route.1st-object orientation http://m.tkk7.com/wqnashqu/archive/2007/01/27/96328.html曲强 Nicky 曲强 Nicky Sat, 27 Jan 2007 15:17:00 GMT http://m.tkk7.com/wqnashqu/archive/2007/01/27/96328.html http://m.tkk7.com/wqnashqu/comments/96328.html http://m.tkk7.com/wqnashqu/archive/2007/01/27/96328.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/96328.html http://m.tkk7.com/wqnashqu/services/trackbacks/96328.html make a good bussiness card~,may be so,may be not,I really want to throw it away,but cannot,just can to learn and write ...off topics... From now I propose to write a route about js tech with my learning steps.Ajax is a good thing maybe the world just like it some good but really short. Js is called for the full JavaScriptlanguage,it's welcomed because it can be run at the piont of client and also effective.when we talk about java object orientation is the focus piont which attracts our attention.we can define a class and then a function.But to JS ,when we create a function and make a instance of this function,we just regard it as a class,so we may say a newable function was a class.The class may have its own attributes or methods,but now we can use the sign["~"]to quote it(refer to). Now I give a simple example about this Of course,u can express with arr.push("Eric").After this,I want to say,we can insert,update & delete attributes or methods when we need.As following user.name="Eric"; user.age="21"; user.sex="male"; //we insert 3 Atts/ user.show=function(){ alert("Name is"+this.name); } //we insert 1 Mes/ delete is very very easy,a old story.. we use undefined user.name=undefined; user.show=undefined; //.... This is js today's post,easiness goes,.~ .. ]]> I/O http://m.tkk7.com/wqnashqu/archive/2006/12/04/85334.html曲强 Nicky 曲强 Nicky Mon, 04 Dec 2006 05:27:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/12/04/85334.html http://m.tkk7.com/wqnashqu/comments/85334.html http://m.tkk7.com/wqnashqu/archive/2006/12/04/85334.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/85334.html http://m.tkk7.com/wqnashqu/services/trackbacks/85334.html
java的i/o恐怕是java体系里最复杂的内容之一了,有时候这个之一可以M。不像c语言一个fopen()可以解决一大堆问题。到了java
呢,又是stream又是reader,M个文件的方式不下十种Q造成很多人因此而放弃了javaQ当初刚学java的时候班里很多h都对java有很
高的热情Q可C现在Q不知道q有多少人坚持下来了。具有讽刺意味的事java
i/o的设计者的初衷是让i/o变得单一点,哪知道若q年后,弄出q么一大摊子来。现在又加了一个nio----是newioQ不知道日后q会弄出什
么东西来?/div>
用i/o可以解决文gQ网l通讯{几乎所io问题。功能强大,唯一的缺点就是复杂。但仔细一分析Q还是有门\可走的。整个io体系主要分ؓ两大门派。一z?
为流cM是用于字节的InputStream和OutputStreamQ另一zؓ用于字符的Reader和Writerz?Urwz?。认清了q两
zְ知道*Stream的东东全都是派的,不是l承而来是通过实现接口而来。如此,*Reader,*Writer那就是出w于rwz了。还有一?
Filez来处理文g创徏Q删除,修改Q属性问题。对文g的内容进行操作不是他的工作。搞清楚q两大派一派那么解决io指日可待?/div>
那么说了q么多怎么创徏文g呢?举例说明Q主函数׃写了Q?/strong>
File newfile = new File("text.txt");
newfile.createNewFile();
q样在同一个文件夹下创Z一个名为text.txt的文本文Ӟ那枚怎么删除呢?
File newfile = new File("text.txt");
newfile.delete();
q样把q个文g删除了。是不是很简单呢。那么怎么把文件写入这个文本文件呢Q?/strong>
File writetext = new File("text.txt");
[readtext.createNewFile();]//可有可无Q因为文件不存在的话Q会自动创徏
FileWriter fw = new FileWriter(writetext);//像创徏打印?br>
PrintWriter pw = new PrintWriter(fw);//q个呢打印针头了?/div>
pw.println("this is a new file for
read");//q个是说Q把q些东西l我写进d
fw.close();//然后关闭打印?/div>
有点复杂Q当懂了以后Q也感觉不C么了Q那么如何读取这个文本文件呢Q?/strong>
File readtext = new File("text.txt");
FileReader fr = new FileReaer(readtext);//创徏一个扫描A
BufferedReader br = new
BufferedReader(fr);//q是扫描仪内的缓?/div>
String content =
br.readLine(); //M行文?/div>
用熟l了之后可以q么写:
BufferedReader in = new BufferedReader(new
FileReader("text.txt");
String content="";
while((content=in.readLine())!=null){
System.out.println(content);//M行输Z?/div>
}
]]>
java2exe(下蝲) http://m.tkk7.com/wqnashqu/archive/2006/12/04/85330.html曲强 Nicky 曲强 Nicky Mon, 04 Dec 2006 05:18:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/12/04/85330.html http://m.tkk7.com/wqnashqu/comments/85330.html http://m.tkk7.com/wqnashqu/archive/2006/12/04/85330.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/85330.html http://m.tkk7.com/wqnashqu/services/trackbacks/85330.html q里下蝲?
q程极ؓ单,W一?/div>
W二步,选择应用E序cd
W三步,输入启动cR输入带?main Ҏ的类?/p>
W四步,输入要生成的 Exe 文g名:
]]>
正则表达?/title> http://m.tkk7.com/wqnashqu/archive/2006/12/04/85329.html曲强 Nicky 曲强 Nicky Mon, 04 Dec 2006 05:16:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/12/04/85329.html http://m.tkk7.com/wqnashqu/comments/85329.html http://m.tkk7.com/wqnashqu/archive/2006/12/04/85329.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/85329.html http://m.tkk7.com/wqnashqu/services/trackbacks/85329.html
正则表达式主要应用于文本的处理,如检索,替换Q检查错误,文字拆分...实在是一a隑ְQ如果要全部写出来,一本书都不差不多。还好oreilly已经为我们出了一本了?/div>
讲具体内容以前先l个完整的例子,q样能有个感性的认识?/div>
import java.util.regex.*;
public class Regex{
public
static void main(String[] args){
String text = "my email address is "
nicky.jcoder@gmail.com ";
Pattern pattern = Pattern.compile("
\\w+@\\w+.\\w +");
Matcher matcher = pattern.matcher(text);
if(matcher.find()){
System.out.println(matcher.group());
}
}
}
把这D늨序用jdk或jcreator或水ȝ便了。反正运行v来就是了
输出l果:xhinker@163.com
当你看完下面的东西回头再看看q段E序׃发现Q这不过是小菜一?/div>
字符和字W类
表格 A:
字符匚w
操作
解释
例子
l果
.
单个字符匚w
.ord
匚w “ford”, “lord”,
“2ord”,
[ ]
多个字符列表
[cng]
只会匚w “cord”,
“nord”, ?“gord”
[^ ]
不出现字W列?/font>
[^cn]
匚w “lord”, “2ord”,
{? 但不会匹?“cord” or “nord”
[a-zA-Z]
匚w “aord”, “bord”,
“Aord”, “Bord”{?/font>
[^0-9]
匚w “Aord”, “aord”, {?
但不会匹?#8220;2ord”, {?
表格 B:
重复操作W?/font>
操作
解释
例子
l果
?
匚w0ơ或1?/font>
“?erd”
匚w “berd”,
“herd”“erd”{?/font>
*
匚w0ơ以?/font>
“n*rd”
匚w “nerd”, “nrd”,
“neard”, {?
+
匚w1ơ以?/font>
“[n]+erd”
匚w “nerd”, “nnerd”,
{?, 但不匚w “erd”
{n}
匚wn?/font>
“[a-z]{2}erd”
匚w“cherd”, “blerd”,
{? 但不匚w “nerd”, “erd”, “buzzerd”,
{?
{n,}
匚wnơ以?/font>
“.{2,}erd”
匚w “cherd” and “buzzerd”,
but not “nerd”
{n,N}
匚wn-N?/font>
“n[e]{1,2}rd”
匚w “nerd” and
“neerd”{?/font>
常用W号Q?/div>
\d:[0-9]
\D:[^0-9]
\w:[a-zA-Z0-9]
\W:[^a-zA-Z0-9]
{?i):大小写无?/div>
\b和\B分别表示词边界和非词边界
当然上面q些只不q是最常用的,写出几个正则表达式是没有问题了。接下来说说java?/div>
在java里\有其自n的意义,所以在用\s,\d的时候要加上一个\也就是\\s
?a href="file:////d">\\d \\({?/div>
java?.4后开始支持正则表辑ּQ东襉K攑֜java.util.regex包里Q用Pattern生成一个模式对象,然后用matcherq行?
配。如果要输出匚wl果的话Q一定要记得写上matcher.find();否则会出错。当然也可以用替换,q就要看你的喜好拉。想看更多的例子去
jdk帮助文档?/div>
]]>
swing中JTree的用和JTree在netbeans中的用法Q{Q?/title> http://m.tkk7.com/wqnashqu/archive/2006/12/04/85328.html曲强 Nicky 曲强 Nicky Mon, 04 Dec 2006 05:11:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/12/04/85328.html http://m.tkk7.com/wqnashqu/comments/85328.html http://m.tkk7.com/wqnashqu/archive/2006/12/04/85328.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/85328.html http://m.tkk7.com/wqnashqu/services/trackbacks/85328.html 如何在java swing里用JTreeQ就像下面这L?/div>
手工创徏:
首先Q你需要创Z个JScrollPaneQ然后创Z个JTree,再然后创点TreeNode
JScrollPane是盛放JTree的容器,JTree是一个结构相当于一个房子的钢筋框架Q真正的内容是节点node。学q数据结构里的树的话可能会好理解一炏V写代码的时候,三个q程的创建顺序不一定,也可以倒着q来写?/div>
比如,创徏一个简单的初始?树的Ҏ
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JTree;
import javax.swing.tree.*;
public class NewTree {
public
NewTree() {
JFrame jframe=new JFrame();//创徏H体
Container c=jframe.getContentPane();//创徏容器
JScrollPane scrollPane=new
JScrollPane();//创徏一个用于树的容?br>
DefaultMutableTreeNode root=new
DefaultMutableTreeNode("root");//创徏树根节点
DefaultMutableTreeNode file=new
DefaultMutableTreeNode("file1");//创徏一个文件节?br>
root.add(file);//文件节Ҏ加到根节点下
JTree tree=new JTree(root);//以根节点为参数创Z个树对象
scrollPane.setViewportView(tree);//树d到scrollPane里面Qƈ昄
c.add(scrollPane);//scrollPaned到窗体里
jframe.pack();
jframe.setVisible(true);
jframe.addWindowListener(new
WindowAdapter(){//q段代码用于默认关闭
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public
static void main(String[] args){
new NewTree();
}
}
l果是这L:注意关键的是斜体的代码,其他的都是swing的东?/div>
那么如何在netbeans里,创徏和用树?好多人看到的都是下面q样?
q是Z么呢Q我找过代码l果没找刎ͼ后来发现q都是假的,你还是可以通过该改变代码来创徏和用你的树Q改什么?改TreeModel.
到源代码界面下创Z个初始化树的Ҏ:
public void treeInitialize(){
JScrollPane
scrollPane=new JScrollPane();
DefaultMutableTreeNode
root=new DefaultMutableTreeNode("root");
DefaultMutableTreeNode
file=new DefaultMutableTreeNode("file1");
root.add(file);
JTree
tree=new JTree(root);
TreeModel
treeModel = new DefaultTreeModel(root);
tree.setModel(treeModel);
}
注意黑体代码Q这样在H体的构造方法中调用treeInitialize()ҎQ你的树p改变了,tree是你用netbeans生成树对象的引用或者名字,一般会是jTree1?/div>
接下来就是对树的操作了,限于幅不能再讲?
]]>
没有mainҎQ输出Hello,World!Q{Q?/title> http://m.tkk7.com/wqnashqu/archive/2006/07/22/59559.html曲强 Nicky 曲强 Nicky Sat, 22 Jul 2006 09:19:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/07/22/59559.html http://m.tkk7.com/wqnashqu/comments/59559.html http://m.tkk7.com/wqnashqu/archive/2006/07/22/59559.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/59559.html http://m.tkk7.com/wqnashqu/services/trackbacks/59559.html 通常我们学习一门语a的时候,W一个写的程序是输出"Hello,World!"QC/C++/Java中的入口都是mainҎ。实际上Q在Java中,即便没有mainҎQ我们也可以输出HelloQ程序如下:
/** * @(#)Hello.java * 没有mainҎQ输出Hello,World! * 本程序请直接用javac~译Qjava解释q行 * l测试,如果在Eclipse中试图运行,默认情况下,会启动失?br> * * @version J2SDK 1.4.2_10-b03 */ public class Hello { static { System.out.println("Hello,World!"); System.exit(0); //!如果~少q一句,会出现运行期异常 } }
假我们为Hellocd加一个mainҎQ虽然它也是static的,但是静态初始化块会在main之前被执行?/p>
]]> Robocode(? http://m.tkk7.com/wqnashqu/archive/2006/07/22/59558.html曲强 Nicky 曲强 Nicky Sat, 22 Jul 2006 09:18:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/07/22/59558.html http://m.tkk7.com/wqnashqu/comments/59558.html http://m.tkk7.com/wqnashqu/archive/2006/07/22/59558.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/59558.html http://m.tkk7.com/wqnashqu/services/trackbacks/59558.html 一、Robocode介:Robocode是一位IBM的工E师Mat
Nelson用Java语言所创造的机器人战斗仿真引擎。Robocode不是一个完整游戏,它是个半成品Q你所做的是Z的机器h坦克~写E序Q?
让它能够Ud、进攅R防御、躲ѝ开火。只用几十行代码Q就能立d造出一个简单但完整机器人,你可以立卛_它装入Robocode
引擎中,再从Robocode
自带的那些水q不一的示例机器h中选取一个进行一番对战,q可以在|上下蝲由其他程序员~写的水qx高的机器人,与它们比试一下,看看自己的水q_底如
何?br> 开发RobocodeQ也是一个极佳的学习Java 语言的过E。随着你的机器人的”智力”水^的提高,你的~程能力也就跟着水涨舚w了?/p>
二、如果您想了解更多的l节Q请查看如下的资料:
1Q有关Robocode的详l资料,h看如下的pdf文档Q内含Robocode的详l介l、Robocode安装、高水^机器人的代码分析、高U瞄
准策略、Robocode内核分析{?文章,帮助你入门,全部资料来自《程序员?003q合订本配套光盘Q请点击q里Q?a target="_blank">http://www.loujing.com/mywork/java/Robocode/RobocodeBrief.pdf Q?首先L保你计算机内安装了pdf文档阅读器,可自Adobe的网站自׃载,http://www.chinese-s.adobe.com/products/acrobat/readstep2.html )?br> 2Q如果您需要了解Robocode更详l的信息Q可参看如下|站Q?br> Robocode在IBM的官方网站ؓQ?a target="_blank">http://www.alphaworks.ibm.com/tech/robocode Q另外,现在Robocode目已经l止Q成为开源项目,您可以从如下站点下蝲其源代码Q?a target="_blank">http://robocode.sourceforge.net/ ?br> 3Q您可以自我的网站下载Robocode?.0.6版本Q下载地址为:http://www.loujing.com/mywork/java/Robocode/Robocode.rar Q下载解压后双击其中的install.bat卛_安装。当Ӟ请首先确保您的机器里安装了J2SE SDK(Java软g开发包)Q如果您不知道如何设|Javaq行环境Q请参考本人的另一文章:ShowArticle.asp?ArticleID=31 ?br> 4Q如果您是在Eclipse里进行Robocode的开发,您可以参考我的这文?a target="_blank" >http://www.loujing.com/Article/ShowArticle.asp?ArticleID=33 ?/p>
希望您在游戏中也能不断提高自qJava~程水^Q新q快乐!
]]> 打印文本日历 http://m.tkk7.com/wqnashqu/archive/2006/07/22/59557.html曲强 Nicky 曲强 Nicky Sat, 22 Jul 2006 09:17:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/07/22/59557.html http://m.tkk7.com/wqnashqu/comments/59557.html http://m.tkk7.com/wqnashqu/archive/2006/07/22/59557.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/59557.html http://m.tkk7.com/wqnashqu/services/trackbacks/59557.html /** * E序q行当年的日历,E序q行当日?可C?a > */
import java.util.*;
public class CalendarTest { public static void main(String[] args) { GregorianCalendar d = new GregorianCalendar(); int year = d.get(Calendar.YEAR); int month = d.get(Calendar.MONTH); int today = d.get(Calendar.DAY_OF_YEAR); d.set(d.get(Calendar.YEAR),0,1); //讄为当q???0表示1? do { System.out.println(d.get(Calendar.MONTH) + 1 + "?); System.out.println("Sun Mon Tue Wed Thu Fri Sat"); //输出月表?br> month = d.get(Calendar.MONTH); //取得月䆾 int weekday = d.get(Calendar.DAY_OF_WEEK); //获得当月1?在一周中是星期几 for(int i = Calendar.SUNDAY; i < weekday; i++)//控制当月1L起始位置 System.out.print(" "); do { weekday = d.get(Calendar.DAY_OF_WEEK); if (d.get(Calendar.DAY_OF_MONTH) < 10) //如果日期于10,多输Z个空?以便寚w System.out.print(" "); System.out.print(d.get(Calendar.DAY_OF_MONTH));//输出日期 if (today == d.get(Calendar.DAY_OF_YEAR)) //如果是当?则输Z??br> System.out.print("* "); else System.out.print(" "); if (weekday == Calendar.SATURDAY) //到达周六,则换?br> System.out.println(); d.add(Calendar.DAY_OF_YEAR,1); //日期累加 } while (d.get(Calendar.MONTH) == month); //如果q是当月,l箋循环 System.out.println("\n"); } while (d.get(Calendar.YEAR) == year); //如果q是当年,l箋循环 } } ]]> java 常见问题 http://m.tkk7.com/wqnashqu/archive/2006/05/16/46469.html曲强 Nicky 曲强 Nicky Tue, 16 May 2006 11:45:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/05/16/46469.html http://m.tkk7.com/wqnashqu/comments/46469.html http://m.tkk7.com/wqnashqu/archive/2006/05/16/46469.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/46469.html http://m.tkk7.com/wqnashqu/services/trackbacks/46469.html
试题 W一Q谈谈final, finally, finalize的区别? final?
修饰W(关键字)如果一个类被声明ؓfinalQ意味着它不能再z出新的子c,不能作ؓ父类被ѝ因此一个类不能既被声明?
abstract的,又被声明为final的。将变量或方法声明ؓfinalQ可以保证它们在使用中不被改变。被声明为final的变量必d声明时给?
初|而在以后的引用中只能dQ不可修攏V被声明为final的方法也同样只能使用Q不能重? finally?再异常处理时提供 finally 块来执行M清除操作。如果抛Z个异常,那么相匹配的 catch 子句׃执行Q然后控制就会进?finally 块(如果有的话)? finalize?
Ҏ名。Java 技术允怋?finalize()
Ҏ在垃圾收集器对象从内存中清除出M前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对q个对象调用的。它是在
Object cM定义的,因此所有的c都l承了它。子c覆?finalize() Ҏ以整理系l资源或者执行其他清理工作。finalize()
Ҏ是在垃圾攉器删除对象之前对q个对象调用的? W二QAnonymous Inner Class (匿名内部c? 是否可以extends(l承)其它c,是否可以implements(实现)interface(接口)? 匿名的内部类是没有名字的内部cR不能extends(l承) 其它c,但一个内部类可以作ؓ一个接口,由另一个内部类实现? W三QStatic Nested Class ?Inner Class的不同,说得多好(面试题有的很W统)? Nested
Class Q一般是C++的说法)QInner Class
(一般是J***A的说?。Java内部cMC++嵌套cL大的不同在于是否有指向外部的引用上。具体可见http:
//www.frontfree.net/articles/services/view.asp?id=704&page=1 注: 静态内部类QInner ClassQ意味着1创徏一个static内部cȝ对象Q不需要一个外部类对象Q?不能从一个static内部cȝ一个对象访问一个外部类对象 W四Q?amp;?amp;&的区别? &是位q算W?amp;&是布逻辑q算W? W五QHashMap和Hashtable的区别? 都属于Map接口的类Q实C惟一键映到特定的g? HashMap cL有分cL者排序。它允许一?null 键和多个 null 倹{? Hashtable cM?HashMapQ但是不允许 null 键和 null 倹{它也比 HashMap 慢,因ؓ它是同步的? W六QCollection ?Collections的区别? Collections是个java.util下的c,它包含有各种有关集合操作的静态方法? Collection是个java.util下的接口Q它是各U集合结构的父接口? W七Q什么时候用assert? 断言是一个包含布表辑ּ的语句,在执行这个语句时假定该表辑ּ?true。如果表辑ּ计算?falseQ那么系l会报告一?AssertionError。它用于调试目的Q? assert(a > 0); // throws an AssertionError if a <= 0 断言可以有两UŞ式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 应该L产生一个布倹{? Expression2 可以是得Z个值的L表达式。这个值用于生成显C更多调试信息的 String 消息? 断言在默认情况下是禁用的。要在编译时启用断言Q需要?source 1.4 标记Q? javac -source 1.4 Test.java 要在q行时启用断aQ可使用 -enableassertions 或?-ea 标记? 要在q行旉择用断言Q可使用 -da 或?-disableassertions 标记? 要系l类中启用断aQ可使用 -esa 或?-dsa 标记。还可以在包的基上启用或者禁用断a? ?
以在预计正常情况下不会到辄M位置上放|断a。断a可以用于验证传递给U有Ҏ的参数。不q,断言不应该用于验证传递给公有Ҏ的参敎ͼ因ؓ不管是否
启用了断aQ公有方法都必须查其参数。不q,既可以在公有Ҏ中,也可以在非公有方法中利用断言试后置条g。另外,断言不应该以M方式改变E序的状
态?br>
W八QGC是什? Z么要有GC? (基础)? GC是垃圾收集器。Java E序?/a>不用担心内存理Q因为垃圾收集器会自动进行管理。要h垃圾攉Q可以调用下面的Ҏ之一Q? System.gc() Runtime.getRuntime().gc() W九QString s = new String("xyz");创徏了几个String Object? 两个对象Q一个是“xyx”,一个是指向“xyx”的引用对象s? W十QMath.round(11.5){於多少? Math.round(-11.5){於多少? Math.round(11.5)q回QlongQ?2QMath.round(-11.5)q回QlongQ?11; W十一Qshort s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;有错Qs1是short型,s1+1是int?不能昑ּ转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确? W十二,sleep() ?wait() 有什么区? 搞线E的最? sleep()Ҏ是ɾU程停止一D|间的Ҏ。在sleep 旉间隔期满后,U程不一定立x复执行。这是因为在那个时刻Q其它线E可能正在运行而且没有被调度ؓ攑ּ执行Q除?a)“醒来”的线E具有更高的优先U? (b)正在q行的线E因为其它原因而阻塞? wait()是线E交互时Q如果线E对一个同步对象x 发出一个wait()调用Q该U程会暂停执行,被调对象q入{待状态,直到被唤醒或{待旉到? W十三,Java有没有goto? Goto?java中的保留字,现在没有在java中用? W十四,数组有没有length()q个Ҏ? String有没有length()q个ҎQ? 数组没有length()q个ҎQ有length的属性? String有有length()q个Ҏ? W十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的cd? ?
法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父cM子类之间多态性的一U表玎ͼ?
载Overloading是一个类中多态性的一U表现。如果在子类中定义某Ҏ与其父类有相同的名称和参敎ͼ我们说该Ҏ被重?
(Overriding)。子cȝ对象使用q个ҎӞ调用子cM的定义,对它而言Q父cM的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方
法,它们或有不同的参C数或有不同的参数cdQ则UCؓҎ的重?Overloading)。Overloaded的方法是可以改变q回值的cd? W十六,Set里的元素是不能重复的Q那么用什么方法来区分重复与否? 是用==q是equals()? 它们有何区别? Set里的元素是不能重复的Q那么用iterator()Ҏ来区分重复与否。equals()是判M个Set是否相等? equals()?=Ҏ军_引用值是否指向同一对象equals()在类中被覆盖Qؓ的是当两个分ȝ对象的内容和cd盔R的话Q返回真倹{? W十七,l我一个你最常见到的runtime exception? ArithmeticException,
ArrayStoreException, BufferOverflowException, BufferUnderflowException,
CannotRedoException, CannotUndoException, ClassCastException,
CMMException, ConcurrentModificationException, DOMException,
EmptyStackException, IllegalArgumentException,
IllegalMonitorStateException, IllegalPathStateException,
IllegalStateException, ImagingOpException,
IndexOutOfBoundsException, MissingResourceException,
NegativeArraySizeException, NoSuchElementException,
NullPointerException, ProfileDataException, ProviderException,
RasterFormatException, SecurityException, SystemException,
UndeclaredThrowableException, UnmodifiableSetException,
UnsupportedOperationException W十八,error和exception有什么区? error 表示恢复不是不可能但很困隄情况下的一U严重问题。比如说内存溢出。不可能指望E序能处理这L情况? exception 表示一U设计或实现问题。也是_它表C如果程序运行正常,从不会发生的情况? W十九,List, Set, Map是否l承自Collection接口? ListQSet? Map不是 W二十,abstract class和interface有什么区? ?
明方法的存在而不d现它的类被叫做抽象类Qabstract
classQ,它用于要创徏一个体现某些基本行为的c,qؓ该类声明ҎQ但不能在该cM实现该类的情c不能创建abstract
cȝ实例。然而可以创Z个变量,其类型是一个抽象类Qƈ让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract
cȝ子类为它们父cM的所有抽象方法提供实玎ͼ否则它们也是抽象cMؓ。取而代之,在子cM实现该方法。知道其行ؓ的其它类可以在类中实现这些方法? ?
口(interfaceQ是抽象cȝ变体。在接口中,所有方法都是抽象的。多l承性可通过实现q样的接口而获得。接口中的所有方法都是抽象的Q没有一个有
E序体。接口只可以定义static
final成员变量。接口的实现与子cȝ|除了该实现类不能从接口定义中l承行ؓ。当cd现特D接口时Q它定义Q即程序体l予Q所有这U接口的Ҏ?
然后Q它可以在实C该接口的cȝM对象上调用接口的Ҏ。由于有抽象c,它允怋用接口名作ؓ引用变量的类型。通常的动态联~将生效。引用可以{换到
接口cd或从接口cd转换Qinstanceof q算W可以用来决定某对象的类是否实现了接口? W二十一Qabstract的method是否可同时是static,是否可同时是nativeQ是否可同时是synchronized? 都不? W二十二Q接口是否可l承接口? 抽象cL否可实现(implements)接口? 抽象cL否可l承实体c?concrete class)? 接口可以l承接口。抽象类可以实现(implements)接口Q抽象类是否可承实体类Q但前提是实体类必须有明的构造函数? W二十三Q启动一个线E是用run()q是start()? 启动一个线E是调用start()ҎQɾU程所代表的虚拟处理机处于可运行状态,q意味着它可以由JVM调度q执行。这q不意味着U程׃立即q行。run()Ҏ可以产生必须退出的标志来停止一个线E? W二十四Q构造器Constructor是否可被override? 构造器Constructor不能被承,因此不能重写OverridingQ但可以被重载Overloading? W二十五Q是否可以承Stringc? StringcLfinalcL不可以ѝ?
W二十六Q当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方? 不能Q一个对象的一个synchronizedҎ只能׃个线E访问? W二十七Qtry {}里有一个return语句Q那么紧跟在q个try后的finally {}里的code会不会被执行Q什么时候被执行Q在return前还是后? 会执行,在return前执行? W二十八Q编E题: 用最有效率的Ҏ出2乘以8{於? 有C背景?a target="_blank">E序?/a>特别喜欢问这U问题? 2 << 3 W二十九Q两个对象值相?x.equals(y) == true)Q但却可有不同的hash codeQ这句话对不? 不对Q有相同的hash code? W三十,当一个对象被当作参数传递到一个方法后Q此Ҏ可改变这个对象的属性,q可q回变化后的l果Q那么这里到底是g递还是引用传? 是g递。Java ~程语言只由g递参数。当一个对象实例作Z个参数被传递到Ҏ中时Q参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变Q但对象的引用是永远不会改变的? W三十一Qswtich是否能作用在byte上,是否能作用在long上,是否能作用在String? switchQexpr1Q中Qexpr1是一个整数表辑ּ。因此传递给 switch ?case 语句的参数应该是 int?short?char 或?byte。long,string 都不能作用于swtich? W三十二Q编E题: 写一个Singleton出来? Singleton模式主要作用是保证在Java应用E序中,一个类Class只有一个实例存在? 一般Singleton模式通常有几U种形式: W一UŞ? 定义一个类Q它的构造函Cؓprivate的,它有一个static的private的该cd量,在类初始化时实例话,通过一个public的getInstanceҎ获取对它的引?l而调用其中的Ҏ? public class Singleton { private Singleton(){} //在自己内部定义自׃个实例,是不是很奇怪? //注意q是private 只供内部调用 private static Singleton instance = new Singleton(); //q里提供了一个供外部讉K本class的静态方法,可以直接讉K public static Singleton getInstance() { return instance; } } W二UŞ? public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //q个Ҏ比上面有所改进Q不用每ơ都q行生成对象Q只是第一ơ //使用时生成实例,提高了效率! if (instance==null) instanceQnew Singleton(); return instance; } } 其他形式: 定义一个类Q它的构造函Cؓprivate的,所有方法ؓstatic的? 一般认为第一UŞ式要更加安全 ?/font> ]]> jbuilder 调整 http://m.tkk7.com/wqnashqu/archive/2006/05/16/46468.html曲强 Nicky 曲强 Nicky Tue, 16 May 2006 11:42:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/05/16/46468.html http://m.tkk7.com/wqnashqu/comments/46468.html http://m.tkk7.com/wqnashqu/archive/2006/05/16/46468.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/46468.html http://m.tkk7.com/wqnashqu/services/trackbacks/46468.html
一QJBuilder光标定位不准的修改::
在中文的Windows下面安装JBuilder后, 在IDE的代码编辑器里面光标定位会不准确Q?br>很多人通过修改Editor的缺省字体来修改q个问题Q?br>但是JBuilder预设的字体是最观的。鱼与熊掌不能兼得,那么Ҏ么办才好呢Q?/font>
其实最单的办法是把JBuilder的Editor里面?br>~省字体里面的语法高亮列表里?Reserved word"的Bold的属性去掉, 可以了Q而且字体q更漂亮Q?/font>
具体路径Q?Editor Option"->"Color"->"Screen Element"->"Reserved word" ->"Attributes"->"Bold"Q把"Bold"uncheck可以了Q?/font>
Enjoy itQ! 二,如何在Jbuilder中用自定义的Server.xml文gQ?br>q个问题怿困扰很多ZQ解军_法如?br>1Q在jbuilder中运行web app 2,在输出窗口察看server0808的输出目?br>我的jbuilder7是C:/myapp/Tomcat/conf/server8080.xml 3,把这个文件备份, 其中有这样一?br>
4Q删除这一行,停止web app 5,此时Tomcat目录下没有conf目录了,建立q个目录Q将删除?中这句话的文件放?br>conf目录Q还叫做server8080.xmlQ把自己需要的q接池等信息加入
6Q运行web appQ我在jbuilder7中不会替换这个文件?/font>
ok...........................
Using a Custom server.xml file with Tomcat in JBuilder Question: How do a use a custom server.xml with Tomcat in JBuilder 4,5 and 6?
Answer: Make a copy of the JBuilder-generated server.xml file while your Web app is running, modify the line which says the file was generated by JBuilder, make you mods, and then AFTER you quit the Web app you were just running, save your modified copy back to server.xml. After that, JBuilder won't modify that file.
Note: Remember that when you shut down Tomcat you'll need to recreate the directory that the server.xml file was in before you can save it back out. After you've made the above modifications, JBuilder will leave the directory alone. 三,如何修改jbuilderx的字?br>#1: 安装JBX #2: 改变一下,Editor|Display 里面的字体,主要是让jbx搜烦pȝ字体 #3: 关闭JBX #4: 用户ȝ录下Q我的是QC:\Documents and Settings\Administrator\Q?br>.primetimeX/user_zh.properties
d一行: editor.display;fixed_fonts.3=\u5b8b\u4f53
可以啦Q?br>同样也可以添加其它字体,只要?br>editor.display;known_fonts 列表中有的,都可以添加,序~号p?/font>
#5: 重vJBX ]]> Jbulider开发J2MEUd游戏E序 http://m.tkk7.com/wqnashqu/archive/2006/05/09/45259.html曲强 Nicky 曲强 Nicky Tue, 09 May 2006 10:31:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/05/09/45259.html http://m.tkk7.com/wqnashqu/comments/45259.html http://m.tkk7.com/wqnashqu/archive/2006/05/09/45259.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/45259.html http://m.tkk7.com/wqnashqu/services/trackbacks/45259.html 首先开启Jbuilder.建立一个Project?/p>
然后填写名字和\径。l: 然后选择JDK路径Q本w已有WTK2.1Q你可以选择。但是你也可以自己选择其他的WTK版本?br> 点击jdk后面的\径按?l箋: 然后ok,next.工程建立完毕. 接着点击file->New: 然后在对话框左边选择Micro,你就能看到右边出现MIDlet,Displayable. 接上面的:如图C?br> 点击MIDlet or Displayable,则让你输入MIDlet的名?如图: l箋下一?让你输入一个Displayable的名?包括cd(form,canvas{?,是否自动加蝲Command {等 然后Jbuilder自动生成所需代码,以及Jbuilder自加的一些东?你可以添加或修改? q里我将本站一关于介lGamecanvas的文章的代码拿过?做少量修?作ؓ本文章的一个演C? TestMIDlet.java文g:
package temps; import javax.microedition.midlet.*; import javax.microedition.lcdui.*;/** * Title: * * Description: * * Copyright: Copyright (c) 2005 * * Company: * * @author not attributable * @version 1.0 */ public class TestMIDlet extends MIDlet { private Display display; public void startApp() { try { display = Display.getDisplay(this); Displayable1 gameCanvas = new Displayable1(); gameCanvas.start(); display.setCurrent(gameCanvas); } catch (Exception ex) { System.out.println(ex); } } public Display getDisplay() { return display; } public void pauseApp() { } public void destroyApp(boolean unconditional) { exit(); } public void exit() { System.gc(); destroyApp(false); notifyDestroyed(); } }
Displayable1.java内容:
package temps; import javax.microedition.lcdui.*; import java.util.Random; import javax.microedition.lcdui.game.*;/** * Title: * * Description: * * Copyright: Copyright (c) 2005 * * Company: * * @author not attributable * @version 1.0 */ public class Displayable1 extends GameCanvas implements Runnable { private boolean isPlay; // Game Loop runs when isPlay is true private long delay; // To give thread consistency private int currentX, currentY; // To hold current position of the 'X' private int width; // To hold screen width private int height; // To hold screen height private Random random=new Random(System.currentTimeMillis()); private final int[] sequence={0,1,2,1,0,1,2,1,0,1,2,1,1,1,1,1,1}; private int counter=0; private int enemyX,enemyY; private int enemyDirect=0; private boolean isdown=false; private boolean isalive=true; // Sprites to be used private Sprite playerSprite; private Sprite backgroundSprite; private Sprite enemySprite; // Layer Manager private LayerManager layerManager; // Constructor and initialization public Displayable1() throws Exception { super(true); width = getWidth(); height = getHeight(); currentX = width / 2; currentY = height / 2; enemyX=width/4; enemyY=height/4; delay = 100; Image playerImage=null; Image backgroundImage=null; Image enemy=null; // Load Images to Sprites try { playerImage = Image.createImage("/transparent.png"); backgroundImage = Image.createImage("/background.png"); enemy=Image.createImage("/frames.png"); } catch(Exception e) { System.out.println("get Image error!"+e.getMessage()); } playerSprite = new Sprite(playerImage, 32, 32); System.out.println(playerSprite.getRawFrameCount()); enemySprite=new Sprite(enemy,50,21); backgroundSprite = new Sprite(backgroundImage); layerManager = new LayerManager(); layerManager.append(playerSprite); layerManager.append(enemySprite); layerManager.append(backgroundSprite); } // Automatically start thread for game loop public void start() { isPlay = true; Thread t = new Thread(this); t.start(); } public void stop() { isPlay = false; } // Main Game Loop public void run() { Graphics g = getGraphics(); while (isPlay == true) { input(); drawScreen(g); try { Thread.sleep(delay); } catch (InterruptedException ie) { } } } // Method to Handle User Inputs private void input() { int keyStates = getKeyStates(); playerSprite.setFrame(0); if(isalive) { if(counter==0) { enemyDirect=Math.abs(random.nextInt()%4); } counter++; switch(enemyDirect) { case 0: enemyY=Math.max(0,--enemyY); break; case 1: enemyY=Math.min(++enemyY,height-enemySprite.getHeight()); break; case 2: enemyX=Math.max(0,--enemyX); break; case 3: enemyX=Math.min(++enemyX,width-enemySprite.getWidth()); break; } counter=(counter++)%(sequence.length()); enemySprite.setFrame(sequence[counter]); } else { enemyY+=counter; enemyY=Math.min(enemyY,height-enemySprite.getHeight()); if(enemyY counter++; enemySprite.setFrame(3); } // Left if ((keyStates & LEFT_PRESSED) != 0) { currentX = Math.max(0, currentX - 1); playerSprite.setFrame(1); } // Right if ((keyStates & RIGHT_PRESSED) != 0) if (currentX + 5 < width) { currentX = Math.min(width, currentX + 1); playerSprite.setFrame(3); } // Up if ((keyStates & UP_PRESSED) != 0) { currentY = Math.max(0, currentY - 1); playerSprite.setFrame(2); } // Down if ((keyStates & DOWN_PRESSED) != 0) { isdown=true; } if ((keyStates & DOWN_PRESSED) != 0) { if(isdown) { if (currentY + 10 < height) { currentY = Math.min(height, currentY + 1); playerSprite.setFrame(4); } } } if((keyStates & FIRE_PRESSED)!=0) { isalive=!isalive; counter=0; } if(!(enemyX+enemySprite.getWidth()currentX+playerSprite.getWidth() || enemyY>currentY+playerSprite.getHeight()) && isalive) { counter=0; isalive=false; } } // Method to Display Graphics private void drawScreen(Graphics g) { g.setColor(0xffffff); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0x0000ff); // updating player sprite position playerSprite.setPosition(currentX, currentY); enemySprite.setPosition(enemyX,enemyY); layerManager.setViewWindow(0, 0, width, height); layerManager.paint(g, 0,0); g.setColor(0xffffff); flushGraphics(); } }
此程序里敌h随机?个方向移?而玩家控制的角色可Q意移? 如果两者发生碰?则敌人死? 另外按fire键可直接让敌人生或死 关于q行,Jbuilder里有个运行配|? 一般不用修?如果多个Midlet,你可以在q里d. 关于用Jbuilder打包. 一样file->new: q个?005?,x里有所不同,选择Archive,双选择MIDlet,然后ok. q里选择要打包文件的目录,当前默认是所有的class文g和资源文?你也可以删除?自己选择一部分. 然后next,直到最? 然后q行,在运行配|中默认重新rebuild,打包{等.然后你能看到左上框里有jar文g和jad文g. q行l果: 呵呵,用你控制的主角去撞q只大飞虫试? ]]> J2ME开发及JBuilder工具的应?? http://m.tkk7.com/wqnashqu/archive/2006/05/09/45257.html曲强 Nicky 曲强 Nicky Tue, 09 May 2006 10:17:00 GMT http://m.tkk7.com/wqnashqu/archive/2006/05/09/45257.html http://m.tkk7.com/wqnashqu/comments/45257.html http://m.tkk7.com/wqnashqu/archive/2006/05/09/45257.html#Feedback 0 http://m.tkk7.com/wqnashqu/comments/commentRss/45257.html http://m.tkk7.com/wqnashqu/services/trackbacks/45257.html 是在这L环境下J2ME技术得以快速发展,J2ME用来为接入和卛_接入互联|的讑֤提供应用开发^台和执行环境Q本文则主要如何利用JBuilderq行快速的J2ME应用开发? 1. J2ME分层l构及MIDP?
J2ME是SUN的JAVA2q_微型版(JAVA2q_3个版本之一Q另两个是标准版J2SE和企业版J2EEQ,采用3层结构设计。最低层为配|层
QConfigurationQ,包括虚拟机(VMQ和cd两部分,q一层与讑֤层(g及操作系l)关系紧密Q由SUN提供参考规范和源代码,讑֤厂商
Ҏ讑֤特征q行相应的移植。当前J2ME提供有两个配|:q接讑֤配置QCDCQ和有限q接讑֤配置QCLDCQ。前者主要面向有较大内存和处理能力?
只需有限功能的设备,如电视置盒、冰、汽车导航设备等Q这些设备都有连接网l和怺交互的需求,其内存在2M以上Q后者主要面向对内存和处理能力有?
大限制的手持讑֤Q如现在使用的手机、PDA{,现在及将来大多数q些讑֤都已l能够接入互联网Q其内存范围160KbQ其?28Kb用于虚拟机及c?
库,臛_32Kb用于CLDC规范所要求的应用程序堆栈空_?M。二者主要区别在于能提供lVM及应用程序的存储I间QCDC所用VM及类库实际是?
考J2SE标准Q去除了不需要的功能如AWT。CLDC所用VMQ称作KVMQ则有较大区别,包括c验证机制。对于下一代移动终端设备如电话、高?
PDAQ则是CDC所应用对象Q因为它们将有超q?M的内存? 讑֤层之上是表层QProfileQ,再之上则是应用层
QApplicationQ。简表层扩展了配|层功能Z层应用提供APIQ如果说配置层面向设备,表层则面向应用。可以根据需要在CDC或CLDC?
之上提供多种表,一个配|层之上也可以有多个表。当前CDC之上有基表(Foundation
ProfileQ和ZFP的Personal Profile和RMI
Profile。CLDC之上则主要提供有Ud信息讑֤表(MIDPQ,即用于手机、PDA{移动终端的讑֤表,提供API以支持无U应用的开发?
CLDCcd一部分来自J2SEQ这部分cd是经q裁减的Q去除了不必要的功能Q主要包括java.lang包中的系l类、数据类?
cR异常处理类Qjava.util包的集合cR时间类和附加工LQjava.io包的I/O处理cRCLDC专有cd主要?通用q接框架QGCFQ?
"QؓCLDC提供|络q接功能Q这些网l接口都是Connectioncȝ子类Q由cConnector所提供的方法调用,q些接口或类位于?
javax.microedition.io? CDCcd则是CLDC的超集,因此为CLDC开发的应用E序可以UL到CDCq?
収ͼ׃CDC采用标准的J2SE
VMQ因此其开发与标准的J2SE开发一_只是在用javac工具~译源代码时需要用CDC的类库,即?bootclasspath参数指向
CDCcd? MIDP扩展了CLDC的功能,它承了GCFq在此基上增加了cHttpConnectionQ用以提?
HTTPq接功能Q尽从理论上CLDC/MIDP可以提供socket、数据报、文件、NFS{多U连接类型,但现在标准的CLDC/MIDP仅支?
HTTP协议Q一些设备实现则提供了socket和HTTPS协议的支持)QMIDPcd ȝ如下Q? java.io、java.lang、java.utilQ属于MIDP的核心包Q分别用来提供系lI/O、语a支持和工h持。包中的cL自CLDCq稍有增加,但都来自J2SE? javax.microedition.midletQ定义了MIDP应用E序Q以及应用程序和它所q行于环境之间的交互? javax.microedition.lcduiQؓMIDP应用E序提供用户界面API? javax.microedition.rmsQ用来ؓMIDlet提供持久存储的机Ӟ应用E序可以存储数据Q在以后需要的时候获取这些数据? javax.microedition.ioQ提供了ZCLDC通用q接框架的网l支持? 2. MIDP应用E序开? q里讨论的J2ME无线应用开发主要是ZCLDC/MIDP的开发,其应用程序可q行于移植有KVM的手机、PDA{,q类讑֤由MIDP定义Q即Ud信息讑֤QMIDQ,可看作一垂直应用市场? 可在PCQWindows、UNIX或Linuxq_Q上开发MIDP应用E序Q编译成cL件Ş式,下蝲到目标设备上Q经q类文g的验证(验证是否有不W合KVM规范的方法调用等Q后卛_解释执行? 生成?java文g臛_有一个是扩展了javax.microedition.midlet.MIDletcȝ子类Qƈ且实现几个规定的接口Q比如下面的一个MIDletE序 Q? import javax.microedition.midlet.*; //应用E序生命周期Q和J2SE一P包java.lang.*是默认加载的 import javax.microedition.lcdui.*; //MIDP用户界面 public class FirstMIDlet extends MIDlet implements CommandListener { private Display display; // 引用MIDlet的Display 对象 private TextBox textBox; // Textbox 昄一条消? private Command cmdExit; // 讑֮按钮用于退出MIDlet public FirstMIDlet() { // MIDlet构造程? display = Display.getDisplay(this); cmdExit = new Command("Exit", Command.SCREEN, 1); textBox = new TextBox("My First MIDlet", "Hello, J2MEQ?, 50, 0); textBox.addCommand(cmdExit); textBox.setCommandListener(this); } public void startApp() { // 必须要实现的接口Q被应用理软g调用来启动MIDlet display.setCurrent(textBox); } public void pauseApp() { } // 必须要实现的接口 public void destroyApp(boolean unconditional) { } //必须要实现的接口 public void commandAction(Command c, Displayable d) { //查一下是否选择了退出命? if (c == cmdExit) { destroyApp(false); notifyDestroyed(); } } }
q是最单且功能完整的MIDlet应用E序Q其中接口startApp、pauseApp、destroyApp是必要实现的,应用E序理?
QJAMQ通过q些接口调用和控制应用程序,与AppletcM。除q个ȝ外还可以有其它辅助类Q其要求和J2SE一致? 然后使用
javac工具~译Qjavac工具来自J2SEQ至JDK
1.3版,~译时应该用参?bootclasspathq指向MIDPcd。之后用preverify工具预验证,以保证生成的.class文gW?
合CLDC要求Q这一步ؓ每个cL件添加堆栈映(stackmapQ此属性ؓCLDC新定义)属性,增加cL件大约5%? 此时可以用midp工具Q来自MIDP实现的可执行文gQ模拟运行,之后卛_打包Q需要编写一清单文gQ清单文件参考CLDC/MIDP规范Q,用jar工具Q来自J2SEQ把预验证后的类文g、资源文件、清单文件打包?
要发布应用程序还需要编写一描述文gQJADQ,JAD的要求同清单文g一_可以自定义参C应用E序调用。其中一个参数MIDlet-Jar-
URL以URL方式指向JAR文gQ移动终端设备通过JAMq接|络获取JADQ下载MIDlet-Jar-URL指向的JAR到设备中Q通常JAM要先
判断JAD与清单文件是否一_应用E序是否有效Q然后才军_下蝲? q行时执行环境、JAR包、JAD文g和应用程序生命周期,q些要素构成MIDlet套gQ由JAM理Q每个MIDlet套g可包含一个或多个MIDlet? 上面是一个MIDP应用E序开发的关键点,具体的开发方法及开发工具大致分为如下几U: ? 基本开发工?
最基本的开发方式是下蝲SUN提供的CLDC/MIDP参考实现及源代码,可根据需求编译生成一个CLDC/MIDP实现QƈUL到设备上。配|好开?
环境QCLDC/MIDP实现、JDK1.3Q后卛_采用上述Ҏ和工兯行开发,多采用命令行方式Q这是最原始的方法? ? J2MEWTK开发工?
q是SUN提供的便捷开发工P用于Windows环境Q同样需要先安装JDK1.3。源E序仍需要用常规的文本~辑器,把编辑好的源文g及资源文?
按一定要求放在规定目录下QJ2MEWTK所提供的是菜单或按钮方式的命o。J2MEWTK中有相应的编译(和预验证一个步骤)、打包、模拟运行的菜单
Q或按钮Q,以及其它辅助工具? ? IDE工具 可以使用Forte For Java、JBuilder{IDE工具和J2MEWTK集成使用Q它们除了有J2MEWTK的功能外Q就是提供有可视化的开发工兗? 3. 使用JBuilder MobileSet
JBuilder是JavaE序员常用工具之一Q在于它强大的可视化~程工具Q集成的~译、运行和调试环境。要为JBuilder提供J2ME无线应用
开发支持,需要在JBuilder基础之上安装MobileSetQ徏议安?.0版,当前支持CLDC/MIDP?.0.3版本Q而JBuilder
的版本应该是6。JBuilder MobileSet 2可从下面|址免费下蝲Q? http:
//www.borland.com/jbuilder/mobileset/
同时q要下蝲相应的MobileSet序列号和许可密钥Q免费)Q根据提C安装MobileSetq注册后Q运行JBuilder会找?
"Help|MobileSet Guilde"菜单V用菜?File->New..."打开"Object
Gallery"对话框,会出C个新的页面标{?Micro"Q此时图?MIDlet"?MIDP
Displayable"是灰色的Q只有生成一个MIDP目后才能用这两个图标? 3.1 JBuilder MobileSet的特? JBuilder MobileSet是一个开攑ַP能够与其它供应商提供的J2ME开发工具包集成在一P当前提供了对下列厂商工具包的支持Q? Sun提供的J2ME无线开发工具包1.0.3版(J2MEWTKQ? 诺基亚的J2ME开发套Ӟhttp://forum.nokia.com/Q? 襉K子的SMTK开发工具包Qhttp://www.siemens-mobile.de/Q? 其中J2MEWTK已经包含在MobileSet 2的安装文件中Q如果要使用J2MEWTK提供的开发类库,q且q没有安装J2MEWTKQ可以在安装MobileSet 2旉择完全安装。MobileSet 2提供了下列辅助开发的工具Q? 用于CLDC/MIDPcȝCodeInsight工具 c?包浏览器 JDK转换工具 动态适配CQ何J2ME表,包括MIDP
和开发其它Java应用E序一PJBuilder通过MobileSet提供了快速开发模板,包括MIDP目模板QMIDP
Displayable模板QMIDlet模板。它提供了RADQ快速应用开发)的可视设计器Q支持MIDP
UI元素。通过MobileSetq支持MIDP应用E序打包和OTA配置QOver the
AirQ上载和下蝲文g和MIDlet套gQ用来配|应用程序到讑֤上)? MobileSet能够用在JBuilder的个人版、专家版和企业版Q但是一些功能不能用在个人版如JDK讄切换Q打包器{? 3.2 配置JDK
前面已提到编译MIDP应用E序旉要设|特定的CLDC/MIDPcdQ以避免使用默认的J2SEcdQ在JBuilder中同栯q行cM讄。这
是通过JDK配置选项实现的,JBuilder的设计独立于JDKQ尽每个JBuilder版本发布时会默认安装一个当时较新的JDKQ类库)Q但q可
以通过它的配置机制讄其它JDKQ包括旧版本、更新版本或者OEM版的JDKQ从而实CJBulder的扩展性? 专家版和?
业版的JBuilder可同旉|多个JDKQ根据需要设|其中一个ؓ默认卛_Q而个人版的却要在需要时重新配置每个JDK。安装MobileSet后可
选择安装J2MEWTK、诺Z和西门子的JDKQ然后ؓ讄的每个JDK自定义一个名Uͼq把其主目录指向q个JDK中\bin的父目录Q需要注意的?
JDK目录中不能有I格如c:\Program Files\ J2mewtk? 3.3 MIDP目
JBuilder开发都以项目概念ؓ中心Q项目文件包含一个(属于q个目的)文g列表以及目属性,其中目属性包括项目模ѝ缺省\径、类库和q接?
|等QJBuilder使用q些信息加蝲、保存、编译和q行目。用Jbuilder开发环境添加、移除文Ӟ或者设|、更攚w目属性都会更攚w目文
件。可以在目面板中看到项目文件作Z节点昄? 生成目的便h式是使用目模板工具Q可用来讄目名称、类型和模板Q以及JDK、工作目录、备份\径和~译输出路径{。其中项目类型可选择.jpx或?jprQ二者内容一P区别是前者用XML格式文gQ因此适合于共享的目?
而JDK则是前面所讄中的一个,q且只有选择CLDC/MIDP的JDK才能使用Object
Gallery中的Micro选项。每个项目至一个MIDletȝQ所以首先应使用MIDlet模板生成一个MIDletȝ。通过模板可以讄q个
ȝ的类名、标题、屏q类型和命o处理方式Q其中屏q类型有4个选择Q? (javax.microedition.lcdui.)Canvas、Form、List、TextBoxQ只有Form的扩展类才能d其它的组ӞItem的子c)。命令处理方式也?个选择Q? ? -- 通过其它的类讄commandListenerQ比如MIDletcR? ? Interface implementation -- 生成一个类q在cM实现commandListener接口Q这U方式生成的cȝ大小会比适配器方式生成的? ? Standard adapter -- q种方式生成的代码采用标准适配器的形式Q? class Foo { private void jbInit() { addListener(new Adapter(this)); } } class Adapter { ... } ? Anonymous adapter -- q种方式生成的代码采用匿名适配器的形式Q? class Foo { private void jbInit() { addListener(new Listener() { ... }); } } 后两U适配器Ş式可以通过目属?Code Style"讄。如果要在这个MIDP应用E序中添加更多的屏幕Q可以用Displayable模板dQ或者通过MIDlet模板d更多的MIDP应用E序到项目中? 生成应用E序框架后,可Ҏ本文W?部分要求d所需代码Qƈ使用JBuilder提供的便h式进行编译(预验证)、打包、模拟运行和发布QJBuilder提供有内|web服务器和ftp服务器,以方便开发者测试应用程序的发布?
如果使用MIDlet或Displayable模板生成一个Formcd的Displayable对象Q则可以使用JBuilder?MIDP设计?
"定制用户界面Q即从组件板上以拖拉方式生成UI元素Q可用鼠标调整这些元素的位置或者进行复制、删除等操作Q这是JBuilder强大功能之所在?
如果是用模板生成Displayablec,会自动生成jbInit()ҎQ当在Form中添加UI元素Ӟ设计器会把代码添?
qjbInit()Ҏ。如果希望打开一个现有Displayablecd设计器,它已l有UI元素Q但是没有jbInit()ҎQ首先需要生成一?
jbInit()ҎQ然后把所有的UI元素转移q去? ]]>
վ֩ģ壺
ͼƬС˵ |
ŮѹۿƬ |
ҰƵ߹1 |
Ƶ |
ҹ |
ѹۿĻ |
»ɫվ |
ѹ99þþ㽶 |
aëƬ |
պĻһ |
Ʒ͵벻av |
ŷƷ㽶 |
˰aa߹ۿ |
ƬƵ |
ַ |
99reƵƷȫ |
еİjŽŮƵ |
һƬѿ |
³³ƵѲ |
պŷһ |
ۺ |
ƷҳĻ |
ձ߹ۿ |
Ļ߲ |
ձ߹ۿ |
Aһ |
Ʒ_˳߸ |
ƷVƷVպƷ |
www.Ʒ |
ëƬav߲һ |
ĻӰѹۿַ |
պƵ |
Ƶѹ |
aԴ |
ԲƵ |
µĻ |
߹ۿ˳Ƶ |
ձһvr |
վѹۿ |
һ |
ƷVƬ߹ۿ |