sunfruit[请访问http://www.fruitres.cn]

--我相信JAVA能走得更远 QQ:316228067

2006年8月11日 #

Linux Enterprise 5 安装Oracle出现ins_rdbms.mk错误的解决办法

    --sunfruit

    在Linux Enterprise 5安装Oracle的时候有时候会报错例如“makefile '/oracle/product/10.2.0/db_1/rdbms/lib/ins_rdbms.mk' 的目标 'all_no_orcl' 时出错”

    经过多次测试是缺少相关的系统包文件,至少我的环境中确实是这样,只要是安装了下面的包文件,这个错误可以避免(版本号在不同环境中略有不同)

    compat-libstdc++-33-3.2.3-61
    compat-libstdc++-296-2.96-138
    gcc-4.1.1-52.el5
    gcc-c++-4.1.1-52.el5
    glibc-2.5-12
    glibc-common-2.5-12
    glibc-devel-2.5-12
    glibc-headers-2.5-12
    libgcc-4.1.1-52.el5
    make-3.81-1.1
    binutils-2.17.50.0.6-2.el5
    openmotif-2.3.0-0.3.el5

    以上的安装包由于在安装Linux的选择的包以及具体的环境不同可能,可能有些不需要,不过如果出现了ins_rdbms.mk的错误,可以按照这个方法尝试一下

    注:以上的安装在Linux Enterprise 5的安装盘中都包含,不需要额外在网上下载

posted @ 2008-09-12 09:18 sunfruit 阅读(5405) | 评论 (1)编辑 收藏

Linux Enterprise 5安装Oracle10g,Oracle10g字符集设置问题

    -sunfruit

    如果在安装Oracle10g的时候没有选择字符集,则按照下面的3部进行字符集的修改就可以完全正常的使用Oracle10g(注:关于下面的1、2、3均是转贴,后面添加了个人在使用的时候一些心得)
   

1、检查服务器上Oracle数据库的字符集   
    sqlplus /nolog
  SQL>  connect / as sysdba
  连接成功.   
   
  SQL>  desc  props$   
    列名                                                    可空值否      类型   
    -------------------------------  --------  ----   
    NAME                                                        NOT  NULL  VARCHAR2(30)   
    VALUE$                                                                      VARCHAR2(2000)   
    COMMENT$                                                                  VARCHAR2(2000)   
   
  SQL>  col  value$  format  a40   
  SQL>  select  name,value$  from  props$;   
   
  NAME                                                      VALUE$   
  ------------------------------  -------------------------   
  DICT.BASE                                            2   
  NLS_LANGUAGE                                      AMERICAN   
  NLS_TERRITORY                                    AMERICA   
  NLS_CURRENCY                                      $   
  NLS_ISO_CURRENCY                              AMERICA   
  NLS_NUMERIC_CHARACTERS                  .,   
  NLS_DATE_FORMAT                                DD-MON-YY   
  NLS_DATE_LANGUAGE                            AMERICAN   
  NLS_CHARACTERSET                              ZHS16GBK   
  NLS_SORT                                              BINARY   
  NLS_CALENDAR                                      GREGORIAN   
  NLS_RDBMS_VERSION                            7.3.4.0.0   
  GLOBAL_DB_NAME                                  ORACLE.WORLD   
  EXPORT_VIEWS_VERSION                      3   
   
   
   
  NLS_CHARACTERSET和NLS_CHAR_CTERSET这个参数应该是ZHS16GBK,如不是,改为它。   
   
  SQL*Plus中修改方法:   
  SQL>  update  props$  set  value$='ZHS16GBK'  where  name='NLS_CHARACTERSET'; 


2、确认字符集是否修改的不彻底。
  SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,
  DECODE(TYPE#, 1,
  DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2', 'UNKOWN'),
  9,
  DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),
  96,
  DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
  112,
  DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
  FROM SYS.COL$
  WHERE CHARSETFORM IN (1, 2)
  AND TYPE# IN (1, 9, 96, 112);

3、如果上面的查询的确显示有多个字符集的设定,则进行如下处理:
  SHUTDOWN IMMEDIATE;
  STARTUP MOUNT;
  ALTER SYSTEM ENABLE RESTRICTED SESSION;
  ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  ALTER DATABASE OPEN;

  COL VALUE NEW_VALUE CHARSET
  SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
  COL VALUE NEW_VALUE NCHARSET
  SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

  --INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
  ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
  ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;

  SHUTDOWN IMMEDIATE;
  STARTUP;
  -- 再次启动数据库一遍
  SHUTDOWN IMMEDIATE;
  STARTUP;

**************注意****************
本人在使用上面的方法设置以后Oracle10g可以正常使用,在导入dmp,sql文件的时候则需要在Linux中做如下设置
sql文件,dmp文件在导入oracle的时候需要设置字符集

export LANG=zh_CN.GBK    //这个是linux的字符集设置
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK   //这个是oracle的字符集设置

posted @ 2008-09-12 09:09 sunfruit 阅读(2309) | 评论 (0)编辑 收藏

[原创]Applet上叠加层的解决方案(非div)

    --sunfruit

    在applet上叠加层有2种方式
    第一:使用iframe的方式
    第二:使用window.createPopup();方式

    <div></div>的方式我是没有试成功,无论如何设置,div都在applet的下面,要是哪位实验成功了,经验也共享一下

    由于window.createPopup()主要用于创建右键菜单,由于其的一些特性,例如在其他地方点击,该window.createPopup()对象消失,所以叠加层方式使用window.createPopup()并不合适,使用iframe制作叠加层的效果更好更好

    效果图如下
    
    
    演示:http://www.fruitres.cn/applet.jsp,可以从该演示页直接下载js代码,或者到代码下载页下载
    代码下载:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1084563770&number=0 
    更多下载:http://www.fruitres.cn/

posted @ 2007-12-29 15:36 sunfruit 阅读(942) | 评论 (0)编辑 收藏

[原创]使用JAVA开发不规则滚动条

    --sunfruit

    在GIS网站上一般都会看到下面的滚动条,俗称骨头棒或是排骨架,当然这个是WEB方式
     

    如果是应用程序或是Applet该如何制作呢,其实也不复杂,只是需要灵活运用Swing的特性,下面是一个Application的demo
   

    看似复杂,其实如果理解了也没有什么神秘

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1342916853&number=0
    JAVA WEB START演示地址:http://www.fruitres.cn/useruploadfile/3/1342916853_jnlp.jnlp
    更多下载:http://www.fruitres.cn/

posted @ 2007-12-29 12:56 sunfruit 阅读(474) | 评论 (0)编辑 收藏

[原创]使用ArcIMS引擎绘制地图基础代码

    --sunfruit 

    代码演示了基于ArcIMS开发包进行地图开发的基础方法

    代码不是单独的可执行类,所以只看private void initMap()方法和public BufferedImage render()方法即可。MapBoundModel不用深究可以理解为等同Envelope类即可

    在确定以下三个值
    private String host = "172.17.8.99";
    private int port = 5300;
    private String servicename = "sde";
    设置正确并且调用refresh();方法也没有异常抛出,但是getStream();返回null值得时候,则需要调整AXL文件添加<OUTPUT method="stream"/>重新发布,具体AXL内容请注册后下载加密附件查看

    查看代码直接下载demo文件即可

    地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1257242391&number=0
    更多下载:http://www.fruitres.cn

posted @ 2007-11-30 23:28 sunfruit 阅读(425) | 评论 (0)编辑 收藏

[原创]使用GeoTools引擎绘制地图基础代码

    --sunfruit

    Geotools是一个开源的Java GIS工具包,可利用它来开发符合标准的地理信息系统。Geotools提供了OGC(Open Geospatial Consortium)规范的一个实现来作为他们的开发

    代码演示了基于GeoTools开源包进行地图开发的基础方法

    代码不是单独的可执行类,所以只看private void init()方法和public BufferedImage render()方法即可。MapBoundModel不用深究可以理解为等同Envelope类即可

直接下载demo文件即可

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=627152979&number=0
    更多下载:http://www.fruitres.cn

posted @ 2007-11-30 23:27 sunfruit 阅读(2662) | 评论 (2)编辑 收藏

[转发]微软紧随Google加入OGC

    --sunfruit
 

    3sNews最新消息,微软现在也已经成为OGC主要成员之一,OGC组织也对微软的加入感到高兴,他们最需要做的事情当然是把Virtual Earth 和 SQL Server 2008纳入OpenGIS兼容标准.微软是随Google之后加入OGC协会的。而2大巨头的加入也标志着空间信息产业已进入发展的快车道,逐渐成为IT主流。

    Google Earth的KML文件格式是开放地理协会的最佳应用之一,这一协会包含345个成员,涵盖公司、政府机构和大学等角色,他们的目标是建立一个OpenGIS标准.2007年春季,Google递交了Keyhole Markup Language (KML 2.1)--Google Earth的最新格式,通过了OGC的验证,很快,它在世界范围内引起了广泛的兴趣,OGC也将他们加入了 -- 地理标示语言(GML)中.

    原贴:http://www.3snews.net/index.php/action_viewnews_itemid_16707.html

posted @ 2007-11-27 09:30 sunfruit 阅读(328) | 评论 (0)编辑 收藏

[原创]A*算法最短路径JAVA代码

    --sunfruit

    基于A*算法最短路径的JAVA代码

    包含一篇很好A*算法的教程

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=682648067&number=0
    更多下载:http://www.fruitres.cn/

posted @ 2007-11-22 15:16 sunfruit 阅读(793) | 评论 (0)编辑 收藏

GML3.1中文版

    --sunfruit

    Geographic information – Geography Markup
    Language (GML)-version 3.1 中文版


    可以到OGC下载GML英文版 www.opengeospatial.org

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1460914139&number=0
    更多下载:http://www.fruitres.cn/

posted @ 2007-11-15 11:45 sunfruit 阅读(710) | 评论 (7)编辑 收藏

[原创]使用MapInfo引擎的自定义图层演示程序

    --sunfruit

    这是一个自定义图层的演示程序,演示向自定义图层添加POI、修改自定义图层中的POI、隐藏/显示自定义图层,关于图层和POI的定义参考原来发布的例子
    通过这个demo可以了解数据部署方式,需要的lib文件,至于其它的就是Swing+Graphics的基本应用,所以不提供源代码
    Swing+Graphics的用法请参考原来发布的作品
    《基本绘图演示源代码,绘制矩形》
    《JAVA开发的俄罗斯方块源代码》

    JDK 1.5.0

    功能:放大、缩小、平移
          地图底图图层控制
          自定义图层控制

    参考MapXtremeJava48_DG_CHS.pdf,在MapInfo网站下载,或是安装开发包以后在文档目录中提供
    
    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=2087703113&number=0
    更多下载:http://www.fruitres.cn/

posted @ 2007-10-22 22:09 sunfruit 阅读(431) | 评论 (0)编辑 收藏

[原创]使用MapInfo引擎的自定义图层控制

    --sunfruit

    使用MapInfo地图引擎的自定义图层的代码

    主要思路是自己建立系统图层,该图层和MapInfo引擎图层无关(关于MapInfo引擎图层控制请参考原来发布的例子),例如建立自己的ATM机图层,要求可以控制显示、隐藏ATM机图层。那么需要建立一个图层类和一个ATM机类,当然最好是接口的设计,这样在2D绘制的时候可以很容易的进行扩展添加其他的图层

    注:不包含地图数据和Lib包

    参考MapXtremeJava48_DG_CHS.pdf,在MapInfo网站下载,或是安装开发包以后在文档目录中提供

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1367471068&number=0
    更多下载:http://www.fruitres.cn/

posted @ 2007-10-22 22:07 sunfruit 阅读(356) | 评论 (0)编辑 收藏

[原创]基于MapInfo地图引擎图层管理演示程序

    --sunfruit

    上次发布了一个使用MapInfo地图引擎进行图层控制源代码,这次照例写了一个java程序来演示图层控制
    通过这个demo可以了解数据部署方式,需要的lib文件,至于其它的就是Swing+Graphics的基本应用,所以不提供源代码
    Swing+Graphics的用法请参考原来发布的作品
    《基本绘图演示源代码,绘制矩形》
    《JAVA开发的俄罗斯方块源代码》

    JDK 1.5.0

    功能:放大、缩小、平移
               地图底图图层控制

    参考MapXtremeJava48_DG_CHS.pdf,在MapInfo网站下载,或是安装开发包以后在文档目录中提供

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=842314737&number=0
    更多下载:http://www.fruitres.cn

posted @ 2007-10-19 17:27 sunfruit 阅读(385) | 评论 (0)编辑 收藏

[原创]使用MapInfo地图引擎进行图层控制源代码

    --sunfruit
    
    使用MapInfo地图引擎控制地图图层的代码

    该代码只是对地图引擎底图数据图层的控制,对于自定义图层和添加新的图层,以后会出相关的代码

    注:不包含地图数据和Lib包
    
    参考MapXtremeJava48_DG_CHS.pdf,在MapInfo网站下载,或是安装开发包以后在文档目录中提供

    直接下载demo文件即可

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=196483354&number=0
    更多下载:http://www.fruitres.cn/

posted @ 2007-10-19 13:31 sunfruit 阅读(409) | 评论 (0)编辑 收藏

Oracle10g Spatial(空间数据库参考) (10.2)

    --sunfruit

    Oracle® Spatial
    User’s Guide and Reference
    10g Release 2 (10.2)

    非常好的Oracle10g Spatial(10.2)的指南和参考文档
    英文的
    
    目录有3部分20多个章节,这里只节选了第二章节的目录
    2 Spatial Data Types and Metadata
    2.1 Simple Example: Inserting, Indexing, and Querying Spatial Data..... 2-1
    2.2 SDO_GEOMETRY Object Type ...... 2-5
    2.2.1 SDO_GTYPE.......... 2-5
    2.2.2 SDO_SRID.......... 2-7
    2.2.3 SDO_POINT .......... 2-7
    2.2.4 SDO_ELEM_INFO......... 2-7
    2.2.5 SDO_ORDINATES ........ 2-10
    2.2.6 Usage Considerations ......... 2-11
    2.3 SDO_GEOMETRY Methods......... 2-11
    2.4 SDO_GEOMETRY Constructors........ 2-13
    2.5 Geometry Examples........ 2-14
    2.5.1 Rectangle......... 2-14
    2.5.2 Polygon with a Hole......... 2-15
    2.5.3 Compound Line String ....... 2-17
    2.5.4 Compound Polygon ......... 2-19
    2.5.5 Point........... 2-20
    2.5.6 Oriented Point .......... 2-21
    2.5.7 Type 0 (Zero) Element......... 2-23
    2.5.8 Several Geometry Types........ 2-25
    2.6 Geometry Metadata Views ........ 2-29
    2.6.1 TABLE_NAME......... 2-30
    2.6.2 COLUMN_NAME......... 2-30
    2.6.3 DIMINFO........ 2-30
    2.6.4 SRID........... 2-31
    2.7 Spatial Index-Related Structures ....... 2-31
    2.7.1 Spatial Index Views ....... 2-31
    2.7.1.1 xxx_SDO_INDEX_INFO Views....... 2-31
    2.7.1.2 xxx_SDO_INDEX_METADATA Views..... 2-32
    2.7.2 Spatial Index Table Definition ....... 2-34
    2.7.3 R-Tree Index Sequence Object ....... 2-35
    2.8 Unit of Measurement Support ........ 2-35

    直接下载demo文件即可

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1500381985&number=0
    更多下载:http://www.fruitres.cn

posted @ 2007-10-19 12:55 sunfruit 阅读(485) | 评论 (0)编辑 收藏

[原创]JAVA基于MapInfo地图引擎简易的地图浏览程序

    --sunfruit

    前一段时间写了一个基于MapInfo地图引擎生成地图图片的例子,这次写了一个java程序来使用MapInfo地图引擎浏览地图,可以看到加载地图数据以后,进行放大、缩小、平移的操作,抛去网络因素,速度方面还是可以接受的
    通过这个demo可以了解数据部署方式,需要的lib文件,至于其它的就是Swing+Graphics的基本应用,所以不提供源代码
    Swing+Graphics的用法请参考原来发布的作品
    《基本绘图演示源代码,绘制矩形》
    《JAVA开发的俄罗斯方块源代码》

    JDK 1.5.0

    功能:放大、缩小、平移

     参考MapXtremeJava48_DG_CHS.pdf,在MapInfo网站下载,或是安装开发包以后在文档目录中提供

     下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=254133506&number=0
     更多下载:http://www.fruitres.cn/

posted @ 2007-10-17 16:19 sunfruit 阅读(1032) | 评论 (0)编辑 收藏

[原创]使用MapInfo地图引擎生成地图图片的代码

    -sunfruit

    使用MapInfo地图引擎生成地图图片的代码,不包含地图数据和Lib包

    直接下载demo文件即可
    
    参考MapXtremeJava48_DG_CHS.pdf,在MapInfo网站下载,或是安装开发包以后在文档目录中提供

    JDK1.5

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=447120696&number=0
    更多下载:http://www.fruitres.cn/

posted @ 2007-10-17 15:18 sunfruit 阅读(509) | 评论 (0)编辑 收藏

[原创]JAVA开发的俄罗斯方块源代码

    --sunfruit

    JAVA开发的俄罗斯方块源代码,比较简陋,只支持最基本的功能,不过框架清晰,感兴趣的可以参考
   
    直接下载demo文件即可

    JDK1.5

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1925709310&number=0
    更多下载:http://www.fruitres.cn/

posted @ 2007-09-29 11:11 sunfruit 阅读(1194) | 评论 (1)编辑 收藏

[资料]WINDOWS平台的java串口开发包javacomm20-win32

    --sunfruit
    windows平台串口java开发包javacomm20-win32

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=994930817&number=0
    更多下载:http://www.fruitres.cn

posted @ 2007-09-12 11:10 sunfruit 阅读(1025) | 评论 (0)编辑 收藏

[原创]WIN XP中选择多个磁盘进行碎片整理的方法

    --sunfruit
    WINXP中选择多个磁盘进行碎片整理虽然bux一个批命令文件,可以顺序执行多个磁盘的碎片整理工作,这样虽然不能在WIN XP中选择多个磁盘进行碎片整理,利用这个方法也可以一次执行多个磁盘的碎片整理,比较实用

    下载地址:http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1942443612&number=0
    更多资料:http://www.fruitres.cn/

posted @ 2007-09-11 23:05 sunfruit 阅读(401) | 评论 (0)编辑 收藏

[SQL]Oracle正常SQL(2004年第1版)

    --sunfruit

    该文档非常好的Oracle维护学习文档
     
     文档目录如下

     监控SQL
     常用户用SQL
     查询表结构
     表空间使用状况
     查询某个模式下面数据不为空的表
     客户端主机信息
     安装Oracle以后,经常使用的修改表空间的SQL代码
     查看回滚段名称及大小
     PL/SQL入门教程
     在from后面使用变量
     Oracle常用数据字典
     在Oracle中实现数据库的复制
     SQL*PLUS环境输入'&字符'的方法
     简说创建用户
     简说Oracle启动及关闭数据库实例
     简说Oracle数据库导出(exp)/导入(imp)
     实例:Oracle导出Excel文件
     实例:Oracle导出HTM文件
     查看数据库保留字
     数据字典及某些字段意义

      下载地址  http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=244294537&number=0
      更多资料  http://www.fruitres.cn/

posted @ 2007-09-06 09:40 sunfruit 阅读(250) | 评论 (0)编辑 收藏

[原创]基本绘图演示源代码,绘制矩形

    --sunfruit
    
    源代码四个文件,在这个DEMO中可以看到
    如何使用2D组件,如何把JPanel做为画板使用,如何使用Canvas替代JPanel,如何设置2D组件的线宽

    这个只是针对像入门的新手,高手就不需要看了,免得扔鸡蛋
    

     下载地址 http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=1016162856&number=0
     更多工具和文档请到 http://www.fruitres.cn/

posted @ 2007-09-03 12:46 sunfruit 阅读(448) | 评论 (0)编辑 收藏

[原创]Oracle表结构导出为HTML工具1.0.4

    --sunfruit
将Oracle表结构导出成Html页面的工具

1.0.4
增加了导出触发器、存储过程、函数的功能,并且修改了不能导出KEYS全部类型的BUG

1.0.3
增加了导出Sequences、View的功能,并且导出界面默认导出到安装文件夹中的export目录中

1.0.2
增加了导出KEYS、INDEX的功能

1.0.1
增加了导出完毕以后直接点击打开文件夹、打开文件的查看方式,并且支持Linux/Win 平台

1.0.0
导出为html文件,导出完毕后直接查看index.html文件即可。导出的内容包括各个表的名称索引和注释以及表中各个字段的明细和注释

下载地址 http://www.fruitres.cn/servlet/buyproductservlet?tag=single&tag1=info&PRODUCT_ID=942025602&number=0 下载版本1.0.4
更多工具和文档请到 http://www.fruitres.cn/

posted @ 2007-07-19 11:41 sunfruit 阅读(1249) | 评论 (1)编辑 收藏

[原创]通过JAVA改变图片的像素Alpha值实现图片透明

    --sunfruit

    设置图片的每个象素Alpha,使得图片透明,核心代码如下

    private void setAlpha(ByteArrayOutputStream os) {
    /**
     * 增加测试项
     * 读取图片,绘制成半透明
     */
    try {

      ImageIcon imageIcon = new ImageIcon(os.toByteArray());
      BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight()
          , BufferedImage.TYPE_4BYTE_ABGR);
      Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
      g2D.drawImage(imageIcon.getImage(), 0, 0,
                           imageIcon.getImageObserver());
      //循环每一个像素点,改变像素点的Alpha值
      int alpha = 100;
      for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) {
        for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) {
          int rgb = bufferedImage.getRGB(j2, j1);
          rgb = ( (alpha + 1) << 24) | (rgb & 0x00ffffff);
          bufferedImage.setRGB(j2, j1, rgb);
        }
      }
      g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());
     
      //生成图片为PNG

      ImageIO.write(bufferedImage, "png",  new File(图片路径));
    }
    catch (Exception e) {
      e.printStackTrace();
    }

  }

posted @ 2007-05-20 00:20 sunfruit 阅读(12085) | 评论 (0)编辑 收藏

[原创]通过HttpURLConnection如何使用代理服务器连接公网

    --sunfruit

    在openConnection之前加上
    Properties   prop   =   System.getProperties();
    System.getProperties().put("proxySet","true");
    // 设置http访问要使用的代理服务器的地址
    prop.setProperty("http.proxyHost","xxxxxxx");
    // 设置http访问要使用的代理服务器的端口
    prop.setProperty("http.proxyPort","xxxxx");
   
    然后并不像有的贴子说的那样添加
    prop.setProperty("http.proxyUser","xxxxxxxx");
    prop.setProperty("http.proxyPassword","xxxxx");
    添加这样的内容是不行的,而是将"username:password"进行base64编码,具体代码如下
    String authentication = "username:password";
    String encodedLogin = new BASE64Encoder().encode(authentication.getBytes());
    httpurlconnection.setRequestProperty("Proxy-Authorization", " Basic " + encodedLogin);
   
    注意BASE64Encoder().encode(authentication.getBytes());这里不能使用BASE64Encoder().encodeBuffer(authentication.getBytes())否则报错
    具体原因参考sun公布的JDK BUG , Bug ID:  4615330  http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4615330

posted @ 2007-03-22 10:41 sunfruit 阅读(1772) | 评论 (0)编辑 收藏

[原创]关于JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件的几点说明

    --sunfruit
    前一段时间发了一个“[原创]JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件”的文章,后来经过深入的使用该功能发现几个要点说明如下:
    第一:正文必须第一个添加到Multipart对象中
    第二:IMGX  X是序号,该序号必须从1开始,并且只能为数字
    以上两点缺少一点都不会成功
    另:ByteArrayDataSource  这个类在旧的javamail开发包中没有,需要新的javamail开发包

posted @ 2006-11-09 11:06 sunfruit 阅读(1479) | 评论 (1)编辑 收藏

[资料]WEB开发利器--JAVASCRIPT API文档 HTML API 文档

    --sunfruit
    有三个压缩包需要下载,下载以后放在同一个目录中解压即可
     下载包1
     下载包2
     下载包3

posted @ 2006-10-31 16:37 sunfruit 阅读(15736) | 评论 (29)编辑 收藏

[原创]JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件

    --sunfruit
   没有什么说的,源代码如下
public void sendMail(int id) {
        //数据初始化
        Transport transport; //发邮件时使用
        String part = GetResource.getXMLValue("mail_port"); //端口
        String mailhost = GetResource.getXMLValue("mail_server"); //服务器
        String user = GetResource.getXMLValue("mail_user"); //用户名
        String password = GetResource.getXMLValue("mail_password"); //密码
        String from = GetResource.getXMLValue("mail_from"); //发件mail
        String strname = GetResource.getXMLValue("mail_strname"); //在地址栏上显示的名字

        String to = GetResource.getXMLValue("mail_to"); //收件人
        String cc = ""; //抄送人
        String bcc = ""; //密送人
        String title = GetResource.getXMLValue("mail_title"); //标题
        byte[] bytes = null;
        try {
            bytes = FileIO.readFile(GetResource.getXMLValue("mail_contentpath")); //正文
        } catch (IOException ex) {
            log.error("",ex);
        }
        String fromat = GetResource.getXMLValue("mail_fromat");

        //获得下载需要的key
        byte[] bkeydes=null;
        try {
            bkeydes=FileIO.readFile(GetResource.getXMLValue("附件地址"));
        } catch (IOException ex) {
            log.error("",ex);
        }

        try {
            Properties props = System.getProperties(); //获得系统属性
            props.put("mail.smtp.host", mailhost); //设置SMTP主机
            props.put("mail.smtp.auth", "true"); //设置身份验证为真,若须身份验证则必须设为真

            //获得邮件会话对象
            Session session = null;

            //需要验证
            session = Session.getDefaultInstance(props,
                                                 new SmtpAuthenticator(user,
                    password));

            //创建MIME邮件对象
            MimeMessage mimeMsg = new MimeMessage(session);
            //设置发信人
            if (strname != null && !strname.equals("")) {
                mimeMsg.setFrom(new InternetAddress(from, strname));
            } else {
                mimeMsg.setFrom(new InternetAddress(from));
            }
            //设置收信人
            if (!to.equals("")) {
                mimeMsg.setRecipients(Message.RecipientType.TO,
                                      InternetAddress.parse(to));
            }
            //设置抄送人
            if (!cc.equals("")) {
                mimeMsg.setRecipients(Message.RecipientType.CC,
                                      InternetAddress.parse(cc));
            }
            //设置暗送人
            if (!bcc.equals("")) {
                mimeMsg.setRecipients(Message.RecipientType.BCC,
                                      InternetAddress.parse(bcc));
            }
            //设置邮件主题
            sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
//            mimeMsg.setSubject("=?GB2312?B?" + enc.encode(title.getBytes()) +
//                               "?=");
            mimeMsg.setSubject(title, "GBK");
            //设置邮件内容
            //mimeMsg.setText(content, "gb2312");
            //发送日期
            mimeMsg.setSentDate(new Date());
            /*******************附件 begin××××××××××××××××××××××××*/
            BodyPart mbp = null; //正文
            //MimeBodyPart mbp1 = null; //附件

            mbp = new MimeBodyPart();
            //设置邮件正文格式(html/text)
            if (fromat.equals("0") || fromat.equals("")) {
                //普通格式
                mbp.setText(new String(bytes,"GBK"));
            } else {
                //网页格式
                mbp.setDataHandler(new DataHandler(new String(bytes,"GBK"),
                        "text/html;charset=gb2312"));
            }
            //!!!!注意必须为new MimeMultipart("related"); 这样的实例化才能发送html正文显示图片的邮件 "related"
            //new MimeMultipart(); 这样实例化则不能发送html正文显示图片的邮件 只可以发送其他的邮件
            Multipart mp = new MimeMultipart("related");
            if (mbp != null)
                mp.addBodyPart(mbp); //正文

            //附件key.des
            BodyPart messageBodyPart = new MimeBodyPart();
            ByteArrayDataSource fileds = new ByteArrayDataSource(bkeydes,"application/octet-stream");
            messageBodyPart.setDataHandler(new DataHandler(fileds));
            //解决附件中文问题
            //mbp1.setFileName(fileds.getName(),"gb2312");
            messageBodyPart.setFileName(MimeUtility.encodeWord("key.des", "GB2312", null));
            mp.addBodyPart(messageBodyPart);

            //附件 图标
            messageBodyPart = new MimeBodyPart();
            bytes=FileIO.readFile(GetResource.getXMLValue("img_logo"));
            fileds = new ByteArrayDataSource(bytes,"application/octet-stream");
            messageBodyPart.setDataHandler(new DataHandler(fileds));
            //解决附件中文问题
//            messageBodyPart.setFileName("fruitrsource_touming.jpg");
//            messageBodyPart.setHeader("Content-ID", "fruitrsource_touming");
            messageBodyPart.setFileName("1.jpg");
            //!!!!注意这里是"<IMG1>" 带有尖括号 而在正文的html里面则是src="cid:IMG1"
            messageBodyPart.setHeader("Content-ID", "<IMG1>");
            mp.addBodyPart(messageBodyPart);

            // 添加 Multipart到Message中
            mimeMsg.setContent(mp);
            mimeMsg.saveChanges();
            transport = session.getTransport("smtp");
            transport.connect(mailhost, Integer.parseInt(part), user, password);
            //发送邮件
            //transport.send(mimeMsg, mimeMsg.getAllRecipients());
            //transport.send(mimeMsg);
            transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
            //System.out.println("mail send!");
            transport.close();

        }

        catch (Exception e) {
            e.printStackTrace();

        }
    }

class SmtpAuthenticator extends Authenticator {
        //SMTP身份验证
        public SmtpAuthenticator(String username, String password) {
            this.username = username;
            this.password = password;
        }

        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(this.username, this.password);
        }

        String username = null;
        String password = null;
    }

posted @ 2006-10-24 23:04 sunfruit 阅读(10888) | 评论 (5)编辑 收藏

[原创]利用图片的像素RGB值还原图像的JAVA应用

    --sunfruit
    JAVA编写的使用像素RGB值还原图像的方法,代码如下
    public class ImageData {

    private int[][] idata=null;

    public ImageData() {
        readImageData();
        writeImageData();
    }

    private int[][] readImageData()
    {
        try {
            //imagedata的键值就是一个存储了图像像素RGB值得文本文件
            RandomAccessFile randomAccessFile = new RandomAccessFile(new File(GetResource.getXMLValue("imagedata")),"r");
            long filesize=randomAccessFile.length();
            long filepointer=0;
            DynArrayInt dynArrayInt=null;
            ArrayList arrayList=new ArrayList();
            int n1=0;
            while(filesize>filepointer)
            {
                filepointer=randomAccessFile.getFilePointer();

                String str1=randomAccessFile.readLine();
                if(str1!=null)
                {
                    String[] str2=str1.split(" ");
                    String[] str3=str2[1].split(",");
                    dynArrayInt=new DynArrayInt();
                    for(int i=0;i<str3.length;i++)
                    {
                        if(!str3[i].equals(""))
                        {
                            int pix = Integer.parseInt(str3[i], 16);
                            dynArrayInt.addInt(pix);
                        }
                    }
                    if(n1==0)
                        n1=dynArrayInt.getSize();
                    arrayList.add(dynArrayInt);
                }
            }

            idata=new int[arrayList.size()][dynArrayInt.getSize()];
            for(int i=0;i<idata.length;i++)
            {
                 DynArrayInt dynArrayInt1=(DynArrayInt)arrayList.get(i);
                for(int j=0;j<idata[i].length;j++)
                {
                    idata[i][j]=dynArrayInt1.getInt(j);
                }
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return idata;
    }

    private void writeImageData()
    {
        BufferedImage bufferedImage=new BufferedImage(idata[0].length,idata.length,BufferedImage.TYPE_INT_RGB);
        for(int i=0;i<idata.length;i++)
        {

            for(int j=0;j<idata[i].length;j++)
            {
                bufferedImage.setRGB(j,i,idata[i][j]);
            }
        }
        Random random=new Random(System.currentTimeMillis());
        String ext="jpg";
        String filepath = System.getProperty("java.io.tmpdir") + random.nextInt(99999) + "." + ext;
        try {
            ImageIO.write(bufferedImage, ext,  new File(filepath));
            System.out.println("文件已经生成,路经为" + filepath);
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }

    }

    public static void main(String[] args) {
        ImageData imagedata = new ImageData();
    }
}

其中的“GetResource”,“DynArrayInt”为自定义类,GetResource得功能就是解析获取properties文件的内容,DynArrayInt是一个整形动态数组,可以在以前的文章里获得“DynArrayInt”的源代码,所谓的图像的像素值就是如下数据
px1 44525b,44555d,475a61,47585d,44555a,46575c,44575d,43565c,42575e,43585f,445960,435962,435964,425861,425861,41585e,3f555e,3e545f,3d5261,3c5162,3d4f59,3d4f59,3f515b,40525c,40525c,40525c,40525c,3f515b,3f515b,3f4f5a,3f4f5c,40505d,3f515f,3f515f,3d5060,3c4f5f,3b505f,3a4e58,3e525e,3e525e,3d5060,415466,3f5264,405363,405460,41555f,42575d,42575e,43585f,445862,445862,445864,445864,445866,445866,415760,435962,445a63,455b66,455b66,445a67,455b68,485d6c,4c626f,4d636e,4e646f,4d636c,4b616a,51686e,536a70,566d73,5c7378,6f7c7a,7c8987,86908f,8d9796,8e9696,949a9a,969c9c,9ca2a2,a1a3a1,a8aaa8,aeb1ac,b2b5b0,b9bcb7,c5c8c2,cccfc9,ced1c9,d6d9d1,d5d8d3,d7dad5,dadbd5,dcddd7,dcdbd4,ddddd3,e0ddd4,e0ddd4,deddd6,deddd6,deddd6,dfded7,dfded7,e0dfd8,e0dfd8,e0dfd8,e0dfd8,e3dfd9,e3dfd9,e3dfd9,e3dfd9,e4e0da,e4e0da,e4e0da,e5e1db,e5e1db,e2e1da,e2e1da,e3e2db,e3e2db,e4e3dc,e4e3dc,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e6e5de,e6e5de,e6e5de,e6e5de,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e4e1d8,e5e2d9,e5e2d9,e4e1d8,e2dfd6,e3e0d7,e2dfd6,e1ded5,e1ded5,e2dfd6,e2dfd6,e2dfd6,e2dfd6,e1ded5,e1ded5,e1ded5,e1ded5,e1ded5,dedad4,dedad4,dcdbd4,dcdbd4,dbdcd4,dbdcd4,d9dcd4,d9dcd4,dedad4,dedad4,ddd9d3,ddd9d3,dbd7d1,dbd7d1,dcd8d2,dcd8d2,dbd7d1,d5d8d0,d5d8d0,d7d8d0,d7d8d0,d7d6cf,d9d5cf,d9d5cf,d9d5cf,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d5d4cd,d5d4cd,d5d7cc,d5d7cc,d5d7cc,d5d7cc,d4d6cb,d4d6cb,d5d7cc,d5d7cc,d5d7cc,d2d7d0,d2d7d0,d3d6d0,d3d6d0,d4d5cf,d4d5cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d0d3cb,d2d3cb,d3d2cb,d6d0cb,d6d0cb,d4d3cc,d3d4cc,d2d5cd,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d0d3cb,d0d3cb,d2d3cb,d2d3cb,d3d2cb,d3d2cb,d5d1cb,d5d1cb,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d1d0c9,d1d0c9,d2d1ca,d2d1ca,d3d2cb,d3d2cb,d3d2cb,d3d2cb
px0 44525b,44575e,465b62,485a5a,455757,46585a,44575b,42555b,41565d,435761,445862,445a63,435966,435964,42595f,42595e,40575c,3f5560,3d5263,3c5066,3a4c58,3b4d59,3d4f5b,3e505a,40525c,40525c,40535a,3f5259,3f5259,3f5057,3f5057,405158,3f5259,3f5259,3d515b,3c505a,3b515c,3a4e5a,3e5260,3e5260,3d5060,415468,3f5266,3f5262,405462,405460,42575d,42575e,43585f,435761,41555f,425662,445864,465a68,465a68,415760,425861,445a63,445a65,445a65,465c69,475d6a,475c6b,44596a,485d6e,4c6373,4d6474,4a616f,4b6472,4b6472,496270,4c6573,5f6c6e,677476,6f7c7e,798587,818a8d,899295,8f969a,91989c,949895,9a9e9b,9ea39d,a1a6a0,a9aea8,aeb3ac,babfb8,c0c5bc,ccd1c8,cfd2cd,d2d5d0,d5d6d0,d7d8d2,dcdbd4,ddddd3,e0ddd4,e0ddd4,deddd6,deddd6,deddd6,dfded7,dfded7,e0dfd8,e0dfd8,e0dfd8,e0dfd8,e3dfd9,e3dfd9,e3dfd9,e3dfd9,e4e0da,e4e0da,e4e0da,e5e1db,e5e1db,e2e1da,e2e1da,e3e2db,e3e2db,e4e3dc,e4e3dc,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e6e5de,e6e5de,e6e5de,e6e5de,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e4e1d8,e4e1d8,e4e1d8,e3e0d7,e2dfd6,e2dfd6,e2dfd6,e1ded5,e1ded5,e2dfd6,e2dfd6,e2dfd6,e2dfd6,e1ded5,e1ded5,e1ded5,e1ded5,e1ded5,ddd9d3,ddd9d3,dbdad3,dbdad3,dadbd3,dadbd3,d8dbd3,d8dbd3,dedad4,dedad4,ddd9d3,ddd9d3,dad6d0,dbd7d1,dcd8d2,dcd8d2,dbd7d1,d5d8d0,d5d8d0,d5d8d0,d7d8d0,d6d7cf,d7d6cf,d7d6cf,d9d5cf,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d5d4cd,d5d4cd,d6d8cd,d6d8cd,d6d8cd,d6d8cd,d4d6cb,d4d6cb,d5d7cc,d5d7cc,d5d7cc,d3d8d1,d3d8d1,d4d7d1,d4d7d1,d4d5cf,d4d5cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d0d3cb,d2d3cb,d3d2cb,d6d0cb,d7d1cc,d4d3cc,d4d5cd,d2d5cd,d4d2d1,d4d2d1,d4d2d1,d4d2d1,d4d2d1,d3d1d0,d3d1d0,d3d1d0,d3d1d0,d0d3cb,d0d3cb,d2d3cb,d2d3cb,d3d2cb,d3d2cb,d5d1cb,d5d1cb,d3d2cd,d3d2cd,d3d2cd,d3d2cd,d3d2cd,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d1d0c9,d1d0c9,d2d1ca,d2d1ca,d4d3cc,d4d3cc,d4d3cc,d4d3cc
以上数据表示图像有两行像素,每一行有260个像素组成,每个像素的RGB值就是44525b

posted @ 2006-10-23 21:28 sunfruit 阅读(1917) | 评论 (2)编辑 收藏

[原创]图论应用--最短路径

    --sunfruit

求上图1点到其他各点的最短路径,依据图论知识建立矩阵模型,进一步得到代码如下

public class ShortPathA {

  private static int[][]
      a = {
      {0, 50, 10, 100000, 45, 100000}, {100000, 0, 15, 100000, 10, 100000}, {20, 100000, 0, 15, 100000, 100000}, {
      100000, 20, 100000, 0, 35, 100000}, {100000, 100000, 1000000, 30, 0, 100000}, {100000, 100000, 100000, 3, 100000, 0}
  };

  private static boolean[] mark = new boolean[a.length];
  public ShortPathA() {
    int Vo = 0; //源点
    //源点到其他各点的距离
    int[] b = new int[a.length];
    DynArrayInt S = new DynArrayInt();
    for (int i = 0; i < a.length; i++) {
      mark[i] = false;
      //b[i] = a[Vo][i];
    }
    int best = -1;
    mark[0] = true;
    b[0] = 0; //{0为源点}
    while (best != 0) {
      best = 0;
      int best_j = 0;
      for (int i = 0; i < b.length; i++)
      {
        if (mark[i]) //{对每一个已计算出最短路径的点}
        {
          for (int j = 0; j < b.length; j++) {
            if ( (!mark[j]) && (a[i][j] > 0)) {
              if ( (best == 0) || (b[i] + a[i][j] < best)) {
                best = b[i] + a[i][j];
                best_j = j;
              }
            }
          }
        }
      }
      if (best > 0) {
        b[best_j] = best;
        mark[best_j] = true;
      }

    }
    System.out.println(java.util.Arrays.toString(b));
  }

  public static void main(String[] args) {
    ShortPathA shortpath = new ShortPathA();
  }

}

posted @ 2006-10-23 21:17 sunfruit 阅读(1684) | 评论 (0)编辑 收藏

用URLConnection或是HttpURLConnection类以POST或是GET方式提交保持Session的解决办法

    --sunfruit
    当通过URLConnection第一次和服务器发起POST或是GET请求以后,通过getHeaderField方法获得SessionID,具体方法为:
    String session_value=getHeaderField("Set-Cookie");
    第二次发起POST或是GET请求的时候需要把刚才获得的SessionID放置在请求的头部然后再提交,这样就能服务器就会认为是同一个Session请求了,具体方法为:
    setRequestProperty("Cookie", session_value);

    如果取得Set-Cookie的值比较长,取值到分号前即可 如 JSESSIONID=575F7196EDB52825D288F4061C66BC29;
    
    这样就实现了保存session向服务器提交请求

posted @ 2006-09-01 14:21 sunfruit 阅读(3260) | 评论 (0)编辑 收藏

[原创]图论应用--一笔画问题

    --sunfruit
tu1_2.gif
上图求一笔画的路径,利用图论的相关知识可以得到程序如下:

public class OnePath {

    private static int[][]
            links = { {0,1,1,0,0,0,1,0}, {1,0,0,1,0,0,0,1}, {1,0,0,1,1,1,0,0},
            {0,1,1,0,1,1,0,0}, {0,0,1,1,0,1,1,0}, {0,0,1,1,1,0,0,1}, {1,0,0,0,1,0,0,0}, {0,1,0,0,0,1,0,0}
    };

    public OnePath() {
        int sum = 0;
        //存放每个点的度
        int[] point = new int[links[0].length];
        for (int i = 0; i < links[0].length; i++) {
            int[] templink = links[i];
            for (int j = 0; j < links[0].length; j++) {
                point[i] += templink[j];
            }
            sum += point[i];
        }

        //计算度数是奇数点的个数,如果大于2则不能一笔画
        int odt = 0;
        int start = -1;
        for (int i = 0; i < point.length; i++) {
            int mod = point[i] % 2;
            if (mod > 0) {
                //if(start==-1)
                    start = i;
                odt++;
            }
        }
        if(odt>2)
        {
          System.out.println("该图不能一笔画");
          return;
        }
        int r = 0;
        //从一个奇数点开始计算
        int nowd=start;
        System.out.print(nowd+1);
        while (sum > 0) {
            r=0;
            //对于起点nowd 检查当前的点r 是否合适
            //links[nowd][r]==0 判断是否有可以走的没有用过的线路
            //(point[r]<=1 && sum!=2) 判断是否是最后一次,如果不是最后一次,那么避开度数是1的点
            while (links[nowd][r]==0 || (point[r]<=1 && sum!=2)) {
                r++;
            }
            links[nowd][r]=0; //已经用过的线路
            links[r][nowd]=0; //已经用过的线路 links[nowd][r] links[r][nowd]互为往返路线,用过1->2那么2->1也作废了
            sum=sum-2; //总度数减2 因为从1->2 消耗了1的度和2的度
            point[nowd]--; //起点和终点的度都减1 1->2 那么1的度和2的度都减1
            point[r]--; //起点和终点的度都减1 1->2 那么1的度和2的度都减1
            nowd =r; //设置新的起点
            System.out.print("->"+(r+1));
        }
    }

    public static void main(String[] args) {
        new OnePath();
    }

}

posted @ 2006-08-31 14:20 sunfruit 阅读(938) | 评论 (0)编辑 收藏

[转]JavaScript面向对象的特性

如果你使用JavaScript编程,你或许会怀疑它是否包含了面向对象(OO)的结构。实际上,JavaScript的确支持面向对象的架构――在某种程度上。本文将通过一个可扩展向量图形(SVG)的实例来说明JavaScript的OO结构。

我如何在类中定义方法和属性?

OO开发的一个基本方面是类及其相应的方法和/或属性的使用。JavaScript通过function关键字支持类(及其属性)的使用。下面的代码定义了一个叫做Figure的JavaScript类:
function Figure() {
this.centerX=0;
this.centerY=0;
this.area=0;
this.transform = transform; // methods are defined like this
function transform(moveX,moveY,angle) {
this.centerX += moveX;
this.centerY += moveY;
} }

这个Figure类有三个属性:centerX,centerY,和area。另外,它还有一个方法叫做transform()。前三行是这个类的构造器。
但是它看起来不像一个类
你会想Figure()看起来不像一个类,而更像一个JavaScript的函数。那么为什么Figure()定义的是个类?

严格的说,Figure()函数没有定义一个类,但是它仿造了一个。它实际上创建了一个对象,在括号里的代码使这个对象的构造器。JavaScript的对象支持是很基础的,它并不区分类和对象。
这就引到了问题为什么Figure()函数创建的是一个对象。对象是可以有属性和方法的。基本上,因为Figure()函数同时包含了属性和方法,它就是个对象。在JavaScript里,所有的函数即是对象又是可调用的代码块。这不像它听起来的那样容易被误解。要创建一个Figure()类/对象,你只用使用以下句法:
MyFigure = new Figure();
你也可以把Figure()函数当作代码块调用,就像这样:
figValue = Figure();
变量figValue没有被定义是因为代码块Figure()没有返回任何值。如果你把return(this.area)加到函数的最后一行,figValue就会有个值0。所以figValue是个类型数字,MyFigure是对象 Rectangle的实例。
为什么所有的变量前面都一个“this”?

这个关键字this表示这是对象的实例变量,可以使用MyFigure.centerX从对象外部访问。要让变量成为私有变量,去掉前缀this就行了。this.transform = transform这一行让方法成为公用方法。这个方法通过MyFigure.transform(100,100,0)调用。

这些类有层次之分吗?

另一个好问题的是JavaScript的类是否有层次之分。回答是肯定有。我们来仔细看看是怎么做到分层的。我们可以定义一个Rectangle子类,并把Figure作为父类:

function Rectangle(startX, startY, endX, endY) {
this.width = endX - startX;
this.height = endY - startY;
this.centerX = (endX + startX)/2;
this.centerY = (endY + startY)/2;
this.computeArea = computeArea;
function computeArea() {
this.area = this.width*this.height;
} }
Rectangle.prototype = new Figure();

Rectangle对象是用4个自变量创建的,前四行是构造器。 Rectangle类包含了一个方法: computeArea()。最后一行Rectangle.prototype = new Figure();,把Rectangle类定义为从Figure类继承来的子类。
然我来解释一下prototype(原型)。每个对象构造器都有prototype属性;这是用来给所有的对象增加新属性和方法的。这就是为什么原型被用来实现继承:child.prototype = new parent();。通过原型,父对象的所有属性和方法都被添加到子对象上。
要注意this.centerX,this.centerY,和area是Rectangle类中所使用的属性,但是它们是 Figure父类的属性。和Rectangle类相似,Circle类可以被定义成Figure类的原型。这种父子关系可以按你需要来定义深度;你可以创建另一个Rectangle的子类。
我如何创建一个类的实例?

在JavaScript里创建一个类的实例很容易:
rect = new Rectangle(100,100,900,800);
这就创建了Rectangle类型的一个对象。Rectangle的构造器在属性width, height, centerX, 和centerY中填入了值。rect.area属性的值是零(0)。使用这个命令就能调用area方法:
rect.computeArea();
rect.area的值现在是560,000。要调用transform方法使用:
rect.transform(100,200,0);

父和子对象的属性可以像这样访问到:
var ar = rect.area;
var wi = rect.width;

我能超越属性和方法吗?

就像你在Java中的一样,你可以超越属性和方法。在子类中定义的属性或者方法可以超越同名的父类的属性和方法。
和全局变量互动
JavaScript也支持全局变量的使用。在以下代码段中测试一下g_area变量的范围:
<HTML>
<SCRIPT>
var g_area = 20;
function Figure() {

this.area=g_area;

}
function Rectangle(){ … }
Rectangle.prototype = new Figure();
function test(){
g_area = 40;
rect = new Rectangle();
alert(rect.area);
}
</SCRIPT>
<BODY onLoad = 'test()'/>
</BODY>
</HTML>
rect.area的值是20(不是你预计的40),这是因为Rectangle对象是Figure对象的原型,这种关系在test()被调用以前就被定义了。要使用g_area的新值,你需要用以下的方法:

function test() {
g_area = 40;
Rectangle.prototype = new Figure();
rect = new Rectangle();
alert(rect.area);
}

对于所有的Rectangle的新实例,这将改变area属性的值。或者,你可以使用这种方法:function test() {
g_area = 40;
rect = new Rectangle();
Rectangle.prototype.area = g_area;
alert(rect.area);
}

这将改变Rectangle所有现存的以及新实例的area属性的值。
结论

为了效仿OO开发,JavaScript提供了必需的继承、封装和超越属性,尽管它不支持接口和方法的过载。如果你是刚接触到OO开发,用它试试。OO概念允许开发者将一组数据和相关操作集中入一个对象。这在管理浏览器事件和管理浏览器内SVG图时很有用。

posted @ 2006-08-30 09:37 sunfruit 阅读(386) | 评论 (0)编辑 收藏

[转发]SEO|搜索引擎优化(如何让你的网站排名靠前)

     摘要: --sunfruit如何让你的网站排名靠前        网站做好了,怎样才能让你的网站在各大搜索引擎中排名靠前呢?网上的帖子很多,通过搜索和总结,整理出了一套自己行之有效的方法,写出来供大家参考       成功案例推荐:http://sooboo.com.cn/       还在继续整理中,而且我们的网站也在不断优化中.........1、 网站建好后首先到各大搜索引擎免费登录你的网站http...  阅读全文

posted @ 2006-08-11 10:37 sunfruit 阅读(719) | 评论 (1)编辑 收藏