ice world

There is nothing too difficult if you put your heart into it.
posts - 104, comments - 103, trackbacks - 0, articles - 0

之前开发的环境为:
JDK5/TOMCAT5.5
现在的开发环境为:
JDK6/TOMCAT5.5

登陆地图界面地图无法加载,IE左下角黄色警告,点开显示“dojo未定义”,GG,BD了一晚上,真是众说纷纭,各有各的情况,直到见到了JDK版本这一说我恍然大悟,我的环境确实变了,迅速装上了JDK5,登陆地图,OK。。。

posted @ 2012-05-16 23:07 IceWee 阅读(2673) | 评论 (0)编辑 收藏

className.class.getResourceAsStream

 
一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties

那么,应该有如下代码:

//前面没有“/”代表当前类的目录

InputStream is1 = Test.class.getResourceAsStream("config.properties");
System.out.println(is1);// 不为null

 

第二:在Test.class目录的子目录下,例如:com.x.y 下有类Test.class ,同时在 com.x.y.prop目录下有资源文件config.properties

那么,应该有如下代码:

//前面没有“/”代表当前类的目录

InputStream is2 = Test.class.getResourceAsStream("prop/config.properties");
System.out.println(is2);//不为null

 

第三:不在同目录下,也不在子目录下,例如:com.x.y 下有类Test.class ,同时在 com.m.n 目录下有资源文件config.properties

那么,应该有如下代码:

//前面有“/”,代表了工程的根目录

InputStream is3 = Test.class.getResourceAsStream("/com/m/n/config.properties");

System.out.println(is3);//不为null

ClassLoader.getSystemResourceAsStream

className.class.getResourceAsStream 的第三种取得的路径一样,但少了“/”

 

InputStream is4 = ClassLoader.getSystemResourceAsStream("properties/PayManagment_Config.properties");
System.out.println(is4);//不为null

posted @ 2012-05-04 13:31 IceWee 阅读(9146) | 评论 (0)编辑 收藏

这种写法一般都会在基类中看到,而且是使用了JAVA泛型的,比如我们J2EE中的BaseDAO什么的,请看代码,其实简写了,分开写就明了了。


基类:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public abstract class SuperClass<T> {

    
private Class<T> beanClass;

    @SuppressWarnings(
"unchecked")
    
public SuperClass() {
        
super();
        ParameterizedType parameterizedType 
=  (ParameterizedType) getClass().getGenericSuperclass();
        Type[] types 
= parameterizedType.getActualTypeArguments();
        beanClass 
= (Class<T>) types[0];
    }


    
public Class<T> getBeanClass() {
        
return beanClass;
    }


    
public void setBeanClass(Class<T> beanClass) {
        
this.beanClass = beanClass;
    }

    
    
public static void main(String[] args) {
        SuperClass
<Cat> superClass = new SubClass();
        System.out.println(superClass.getBeanClass());
    }

    
}


子类:
public class SubClass extends SuperClass<Cat> {
   
   
public SubClass() {
       
super();
    }

   
}


class Cat {

   
public Cat() {
       
super();
    }

}


运行SuperClass后控制台会打印:
class com.stos.test.generic.Cat

看到运行结果你可能就清楚了,就是获取实际的泛型类。








posted @ 2012-04-27 09:13 IceWee 阅读(7563) | 评论 (2)编辑 收藏

原文地址:

http://code.google.com/p/swfobject/wiki/documentation



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> 
<title>SWFObject - step 1</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
</head> 
<body> 
<div> 

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420"> 
<param name="movie" value="myContent.swf" /> 
<!--[if !IE]>--> 
<object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420"> 
<!--<![endif]--> 
<p>Alternative content</p> 
<!--[if !IE]>--> 
</object> 
<!--<![endif]--> 
</object> 

</div> 
</body> 
</html>


posted @ 2011-11-04 14:16 IceWee 阅读(9074) | 评论 (0)编辑 收藏

在安装有些软件的时候,会向注册表中写入大量信息,但长度却超出了注册表的默认限值,此时就会报改错,如图:



错误信息和实际原因简直风马牛不相及,你可能会困惑许久。解决方法:

开始-运行,输入:regedit,确定后打开注册表编辑器

修改注册表:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

Key: RegistrySizeLimit

Type: REG_DWORD

Value: ffffffff (4294967295)

 

如果在注册表中没有找到RegistrySizeLimit 键,可以通过在“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control”右面窗口中新建RegistrySizeLimit的DWORD键值,并设该值为ffffffff




posted @ 2011-10-12 15:27 IceWee 阅读(17434) | 评论 (3)编辑 收藏

实际开发中很可能有删除指定下标元素的需求,这次我就遇到了,为了简单起见,我把数字下标加1了,也就是说要删除第一个元素需要传入参数1而不是0,下面为代码,如果不喜欢可以修改代码!
/**
 
* 删除指定下标的数组元素
 
*/
Array.prototype.remove = function(index){
    
if (isNaN(index) || index < 1 || index > this.length) {
        return;
    }
    
for(var i = 0; i < this.length; i++){
        
if (i == index - 1) {
            
for(var j = i; j < this.length; j++){
                this[j] 
= this[j+1];
            }
            this.length 
= this.length - 1;
            break;
        }
            
    }
}




posted @ 2011-09-10 07:46 IceWee 阅读(1776) | 评论 (0)编辑 收藏

原文出自【雪的痕迹】
原文地址:http://www.java3z.com/cwbwebhome/article/article8/852.html

java做的系统给人的印象是什么?占内存!说道这句话就会有N多人站出来为java辩护,并举出一堆的性能测试报告来证明这一点。其实从理论上来讲java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么N多理由来证明它确实占内存呢?两个字,陋习。

(1)别用new Boolean()
在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolean封装传递的,大部分ORM也是用Boolean来封装boolean类型的,比如:

ps.setBoolean("isClosed",new Boolean(true));
ps.setBoolean("isClosed",new Boolean(isClosed));
ps.setBoolean("isClosed",new Boolean(i==3));

通常这些系统中构造的Boolean实例的个数是相当多的,所以系统中充满了大量Boolean实例小对象,这是相当消耗内存的。Boolean类实际上只要两个实例就够了,一个true的实例,一个false的实例。

Boolean类提供两了个静态变量:
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);

需要的时候只要取这两个变量就可以了,
比如:
ps.setBoolean("isClosed",Boolean.TRUE);
那么象2、3句那样要根据一个boolean变量来创建一个Boolean怎么办呢?可以使用Boolean提供的静态方法:
Boolean.valueOf()

比如:
ps.setBoolean("isClosed",Boolean.valueOf(isClosed));
ps.setBoolean("isClosed",Boolean.valueOf(i==3));

因为valueOf的内部实现是:return (b ? TRUE : FALSE);
所以可以节省大量内存。相信如果Java规范直接把Boolean的构造函数规定成private,就再也不会出现这种情况了。

(2)别用new Integer
和Boolean类似,java开发中使用Integer封装int的场合也非常多,并且通常用int表示的数值通常都非常小。SUN
SDK中对Integer的实例化进行了优化,Integer类缓存了-128到127这256个状态的Integer,如果使用Integer.valueOf(int
i),传入的int范围正好在此内,就返回静态实例。这样如果我们使用Integer.valueOf代替new
Integer的话也将大大降低内存的占用。如果您的系统要在不同的SDK(比如IBM
SDK)中使用的话,那么可以自己做了工具类封装一下,比如IntegerUtils.valueOf(),这样就可以在任何SDK中都可以使用这种特性。

(3)用StringBuffer代替字符串相加
这个我就不多讲了,因为已经被人讲过N次了。我只想将一个不是笑话的笑话,我在看国内某“著名”java开发的WEB系统的源码中,竟然发现其中大量的使用字符串相加,一个拼装SQL语句的方法中竟然最多构造了将近100个string实例。无语中!

(4)过滥使用哈希表
有一定开发经验的开发人员经常会使用hash表(hash表在JDK中的一个实现就是HashMap)来缓存一些数据,从而提高系统的运行速度。比如使用HashMap缓存一些物料信息、人员信息等基础资料,这在提高系统速度的同时也加大了系统的内存占用,特别是当缓存的资料比较多的时候。其实我们可以使用操作系统中的缓存的概念来解决这个问题,也就是给被缓存的分配一个一定大小的缓存容器,按照一定的算法淘汰不需要继续缓存的对象,这样一方面会因为进行了对象缓存而提高了系统的运行效率,同时由于缓存容器不是无限制扩大,从而也减少了系统的内存占用。现在有很多开源的缓存实现项目,比如ehcache、oscache等,这些项目都实现了FIFO、MRU等常见的缓存算法。

(5)避免过深的类层次结构和过深的方法调用
因为这两者都是非常占用内存的(特别是方法调用更是堆栈空间的消耗大户)。

(6)变量只有在用到它的时候才定义和实例化。

(7)尽量避免使用static变量
类内私有常量可以用final来代替。

java内存管理的思想(主要来源于thinking in java)

Java内存管理特点
Java一个最大的优点就是取消了指针,由垃圾收集器来自动管理内存的回收。程序员不需要通过调用函数来释放内存。


1、Java的内存管理就是对象的分配和释放问题。

在Java中,程序员需要通过关键字new为每个对象申请内存空间
(基本类型除外),所有的对象都在堆
(Heap)中分配空间。
对象的释放是由GC决定和执行的。
在Java中,内存的分配是由程序完成的,而内存的释放是由GC完成的,这种收支两条线的方法简化了程序员的工作。但也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。

GC释放空间方法:
监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等。当该对象不再被引用时,释放对象。


2、内存管理结构
Java使用有向图的方式进行内存管理,对于程序的每一个时刻,我们都有一个有向图表示JVM的内存分配情况。

将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向被引对象。另外,每个线程对象可以作为一个图的起始顶点,例如大多程序从main进程开始执行,那么该图就是以main进程顶点开始的一棵根树。在这个有向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象
(连通子图)与这个根顶点不可达(注意,该图为有向图),那么我们认为这个(这些)对象不再被引用,可以被GC回收。

3、使用有向图方式管理内存的优缺点
Java使用有向图的方式进行内存管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。
这种方式的优点是管理内存的精度很高,但是效率较低。


++:
另外一种常用的内存管理技术是使用计数器,例如COM模型采用计数器方式管理构件,它与有向图相比,精度行低(很难处理循环引用的问题),但执行效率很高。


★ Java的内存泄露
Java虽然由GC来回收内存,但也是存在泄露问题的,只是比C++小一点。


1、与C++的比较

c++所有对象的分配和回收都需要由用户来管理。即需要管理点,也需要管理边。若存在不可达的点,无法回收分配给那个点的内存,导致内存泄露。存在无用的对象引用,自然也会导致内存泄露。
Java由GC来管理内存回收,GC将回收不可达的对象占用的内存空间。所以,Java需要考虑的内存泄露问题主要是那些被引用但无用的对象——即指要管理边就可以。被引用但无用的对象,程序引用了该对象,但后续不会再使用它。它占用的内存空间就浪费了。
如果存在对象的引用,这个对象就被定义为“活动的”,同时不会被释放。


2、Java内存泄露处理

处理Java的内存泄露问题:确认该对象不再会被使用。
典型的做法——
把对象数据成员设为null
从集合中移除该对象
注意,当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会自动被清理。


例子:

List myList=new ArrayList();
for (int i=1;i<100; i++) {
    Object o=new
    Object();
    myList.add(o);
    o=null;
}
//此时,所有的Object对象都没有被释放,因为变量myList引用这些对象。

当myList后来不再用到,将之设为null,释放所有它引用的对象。之后GC便会回收这些对象占用的内存。


★ 对GC操作
对GC的操作并不一定能达到管理内存的效果。

GC对于程序员来说基本是透明的,不可见的。我们只有几个函数可以访问GC,例如运行GC的函数System.gc(),System.。
但是根据Java语言规范定义,
System.gc()函数不保证JVM的垃圾收集器一定会执行。因为,不同的JVM实现者可能使用不同的算法管理GC。通常,GC的线程的优先级别较低。

JVM调用GC的策略有很多种,有的是内存使用到达一定程度时,GC才开始工作,也有定时执行的,有的是平缓执行GC,有的是中断式执行GC。但通常来说,我们不需要关心这些。除非在一些特定的场合,GC的执行影响应用程序的性能,例如对于基于Web的实时系统,如网络游戏等,用户不希望GC突然中断应用程序执行而进行垃圾回收,那么我们需要调整GC的参数,让GC能够通过平缓的方式释放内存,例如将垃圾回收分解为一系列的小步骤执行,Sun提供的HotSpot
JVM就支持这一特性。


★ 内存泄露检测
市场上已有几种专业检查Java内存泄漏的工具,它们的基本工作原理大同小异,都是通过监测Java程序运行时,所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括Optimizeit
Profiler,JProbe Profiler,JinSight , Rational 公司的Purify等。

在运行过程中,我们可以随时观察内存的使用情况,通过这种方式,我们可以很快找到那些长期不被释放,并且不再使用的对象。我们通过检查这些对象的生存周期,确认其是否为内存泄露。


★ 软引用
特点:只有当内存不够的时候才回收这类内存,同时又保证在Java抛出OutOfMemory异常之前,被设置为null。
保证最大限度的使用内存而不引起OutOfMemory异常。
在某些时候对软引用的使用会降低应用的运行效率与性能,例如:应用软引用的对象的初始化过程较为耗时,或者对象的状态在程序的运行过程中发生了变化,都会给重新创建对象与初始化对象带来不同程度的麻烦。


用途:

可以用于实现一些常用资源的缓存,实现Cache的功能
处理一些占用内存大而且声明周期较长,但使用并不频繁的对象时应尽量应用该技术


★ java程序设计中有关内存管理的经验

1.最基本的建议是尽早释放无用对象的引用。如:...
A a = new A();
//应用a对象
a = null; //当使用对象a之后主动将其设置为空
….
注:如果a 是方法的返回值,不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除

2.尽量少用finalize函数。它会加大GC的工作量。
3.如果需要使用经常用到的图片,可以使用soft应用类型。它尽可能把图片保存在内存中
4.注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。
5.尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费
6.尽量避免强制系统做垃圾内8.尽量做远程方法调用类应用开发时使用瞬间值变量,除非远程调用端需要获取该瞬间值变量的值。
9.尽量在合适的场景下使用对象池技术以提高系统性能。存的回收,增长系统做垃圾回收的最终时间
7.尽量避免显式申请数组空间

posted @ 2011-08-24 10:25 IceWee 阅读(4592) | 评论 (0)编辑 收藏

上个礼拜卸了ArcIMS装上了ArcGIS Server9.3,感觉使用起来比ArcIMS简单了,安装也比较简单,除了选择下安装目录外一直是下一步。

ESRI公司不是想把一切都WEB化嘛!就是桌面能做的WEB也可以!所以安装后有个定向到ArcGIS Server Manager的网页链接,点击后即可发布地图服务。

但是我安装后怎么都进不去,当然要注意的一点是你用什么帐号登陆?默认的管理员帐号是arcgismanager,密码是你在安装Post Install的时候指定的,没错,就是它,可死活就是进不去呢?先搁下。有人喜欢用管理员帐号登陆,那么没问题,你只需要将当前登陆的管理员或其他用户添加到agsadmin和agsusers两个用户组中即可。当你登陆到Windows操作系统的时候发现增加了这三个用户,看起来很不爽,你根本不会用他们登陆操作系统,那么这里有个隐藏账户的注册表文件,你可以复制下来保存成“任意名称.reg”,双击运行即可

系统登陆界面中隐藏某账户

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "arcgismanager"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "ArcGISSOC"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "ArcGISSOM"=dword:00000000

 

言归正传,为啥我用arcgismanager/密码 登陆不进去了呢?密码我明明记得,或者我用系统管理员(前提是已经将管理员加入了那两个用户组中)登陆也不行?我左思右想,终于想到了,之前查过资料,网上有人说需要关闭防火墙,我突然想起该事来!怎么早没想起?!害得我卸载重装了一遍还是不行!没文化真可怕,记忆力差咱就多博客吧!大脑不行,咱用文字记录!

posted @ 2011-06-27 15:11 IceWee 阅读(2396) | 评论 (0)编辑 收藏

     摘要: 前言:

我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同。其实将java程序打包成exe也需要这个可执行jar文件。
  阅读全文

posted @ 2011-06-05 16:27 IceWee 阅读(391) | 评论 (0)编辑 收藏

FlexBuilder3.0(FB3)插件的安装要求系统中已经存在eclipse,就像当初的MyEclipse一样(MyEclipse5.5-),现在MyEclipse强大了,直接All In One了,把eclipse吃到肚子里了,所以再不用咱们选eclipse目录了,后话。。。eclipse版本要求3.2、3.3或3.4,所以为了能够顺利安装FlexBuilder3.0(FB3),事先要做的是解压一个eclipse(3.2、3.3或3.4)到任意目录,完成FlexBuilder3.0(FB3)的安装

如FlexBuilder3.0(FB3)安装在了如下目录:

E:\Program Files\Adobe\Flex Builder 3 Plug-in

到该目录下将eclipse目录拷贝到MyEclipse的dropins目录下,我的目录结构:D:\Program Files\MyEclipse\MyEclipse 9\dropins,之后将eclipse重命名,如FlexBuilder3,启动MyEclipse就有FlexBuilder3的支持了

MyEclipse好像从7开始装插件的方式就变了,多了个dropins目录,你可以随意将下载下来的eclipse插件放到该目录下,移除也简单

网上的通过代码将插件的.jar文件都追加到bundles.info文件中,我觉得不够清晰,个人感觉将插件拷贝到dropins目录下的方式较低碳环保

posted @ 2011-05-21 14:10 IceWee 阅读(2069) | 评论 (1)编辑 收藏

仅列出标题
共11页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last