用CLASSLOAD来加载,跟踪一下你启动所学要的类,再精简。

解决方案 »

  1.   

    多谢楼上老兄了楼上老兄的意思是就象调试一样,一步步的看到它用到了哪些CLASS,然后再记下这些CLASS,再把没用到的删除?这样的一个过程也不会简单省时多少啊
      

  2.   

    你可以使用一个自己的ClassLoader,在加载每个类的时候都记录它的名称
    这样就可以知道了
      

  3.   

    又或者土一些,java -verbose yourclass这样,这样JVM会自动打印出所有的加载信息,然后自己看看需要哪些
      

  4.   

    如果是做桌面应用可以不必删除,但做APPLET应用就很有必要啊,如果我删掉500K,那我的APPLET下载速度会快上几倍啊
      

  5.   

    将jar文件解压到applet根目录,applet参数archive不写,这样applet只回加载用到的包
      

  6.   

    TO:stonecsdn(东东) 
    很感谢你的帮助。参照你讲的做了,我仔细对比JRE的高速缓存的目录,发现不写archive参数,那些CLASS文件确实是要什么下什么了,而且都下到高速缓存的 file目录中去了,不象以前的一个zip文件下在jar目录中。但这样又有一个新问题,这样一来,那些CLASS文件不是以压缩的形式下载的,这样会导致比原来的压缩包大上几倍,例如我原来的JAR文件只有300K左右的,解开来下载有差不多1M了,这样一来,下载的开销还是大了。
    另外:
    这里我发现一个问题,在客户端的高速缓存目录中,如果我是以JAR文件以载下去的,为何那个ZIP包文件的大小是没压缩之前的大小了?就是如果我的WEB中的APPLET的JAR文件为applet.jar,下载到客户端以后变成了applet20-**(这里一堆数字省掉)**.zip,可我点右键看属性,那个高速缓存中那个文件却是那个jar文件压缩之前的大小????这是为何???难道以JAR文件下载到客户端的时候,实际上并没有以压缩的格式下载吗?还是它写进缓存的目录时,将压缩比变成1:1再写的了???难道我以前所理解的JAR文件是以压缩的方式下载有错误吗?这个问题纯属APPLET的下载问题,这个问题我会再另外再开100K相赠老兄的,非常的希望老兄能帮我解决这个疑惑之处!非常感谢!
      

  7.   

    不管是jar还是class都是以流的方式传递到客户端的,jar是压缩了的流,到客户端再解压,class就不用解了.
    如果用applet做一个客户端工具,那么一般都是企业内网的应用,传输速度都是很快的.而且操作该工具的人都应该具有一定权限的,所以如果applet用到的包不是特别大,传输的延时可以忽略,或者可以做一个log,提示信息加载中......
    以上个人意见,不对请指正
      

  8.   

    我现在做APPLET应用做了一段时间了,以往大部分应用都是用企业内部,所以对包的大小下载的速度可以不太需要考虑,只是不是巨型包就行了。这次要放在外网上,不得不考虑了。这样一来,如果这些class文件不是以压缩流的方式下载的,这样会更得不偿失了,我决定另开一贴,专门讨论APPLET的加载机制问题,这个贴还是放在这里继续看看有没有什么好可以除掉那些CLASS吧。请老兄转至:http://community.csdn.net/Expert/TopicView3.asp?id=3536638我一直以来总是感觉对APPLET加载机制理解的不透,这次幸遇老兄,希望能解开我对此问题的迷惑。我同意你上面所讲的,都是流传到客户端的。这么说要解释我上面所讲的在缓存里的zip文件(即APPLET的JAR)文件的大小为未压缩之前的大小,意思是说下载回来后又解压将其放在缓存目录中了??下载的时候应该还是以压缩后size在网络上传输了??2、另外,究竟什么样的资源文件什么情况下才下载至客户端,以后再次启动APPLET的时候可以不需要从网络上再次下载放在JAR中的文件这个我知道所有的文件都会随JAR下载下来的。所以如果在APPELT中是以getClass().getResource("aa.txt")这种方式读取文件或读取图片的,这种资源文件是肯定会同JAR一同下载下去的。
    但如果不是以这种方式来读取的,而是以url = new URL(getCodeBase(),"aa.txt")这处方式构造的文件,就分不同的情况了,我在缓存的目录上有两种发现,一是图片文件,这种文件会下载到缓存的file目录下,但除了图片文件外,其它的各种文件(我只试过各种文本文件),就不会下载下去了,而是每次都得从网络上去读。我觉得这个问题有点不太理解,也不太确定,我从没找到过这方面的相关资料,只是在实际过程中观察到的情况,希望听听老兄的见解
      

  9.   

    而且我这个APPLET还要做一个WEBSTART的版本的,所以还是硬要想办法将那个包精减才行,请各位老兄继续帮忙出出主意怎么去掉那些不要的CLASS
      

  10.   

    用plot.jar吧!只是打印功能比JFreeChart稍差一点,但大小只有111K.
      

  11.   

    你用JBuilder帮你打包,设置为只打所用到的class就可以了
    不过要注意一下,如果程序中用到了像class.forName等加载的类的话,这样做出来的可能会缺少一些类。
      

  12.   

    多谢楼上老兄,用JB打包真是个好办法,一打出来就少了600多K了,我以前总以为用JB搞什么东西都搞得很庞大的,就都是自己手工搞了。不过有个问题,确实会是有些东西找不到,打包进去的,所有的配置文件都没有进去,我手工添加进去了,但还是有个异常,看了半天,不知道是因为少了什么东西的原因,我贴出关键代码,老兄再帮我看看
    异常为:
    java.lang.ExceptionInInitializerError at org.jfree.chart.ChartFactory.createTimeSeriesChart(ChartFactory.java:1456) at com.map.table.LineStation.createChart(Unknown Source) at com.map.table.LineStation.<init>(Unknown Source)
    我找到了ChartFactory这个文件,但找不到1456行,因为我是反编译过来的,行号不对了,那个方法的代码如下:
    public static JFreeChart createTimeSeriesChart(String title, String timeAxisLabel, String valueAxisLabel, XYDataset dataset, boolean legend, boolean tooltips, boolean urls)
        {
            ValueAxis timeAxis = new DateAxis(timeAxisLabel);
            timeAxis.setLowerMargin(0.02D);
            timeAxis.setUpperMargin(0.02D);
            NumberAxis valueAxis = new NumberAxis(valueAxisLabel);
            valueAxis.setAutoRangeIncludesZero(false);
            XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, null);
            org.jfree.chart.labels.XYToolTipGenerator labelGenerator = null;
            if(tooltips)
                labelGenerator = StandardXYToolTipGenerator.getTimeSeriesInstance();
            org.jfree.chart.urls.XYURLGenerator urlGenerator = null;
            if(urls)
                urlGenerator = new StandardXYURLGenerator();
            plot.setRenderer(new StandardXYItemRenderer(2, labelGenerator, urlGenerator));
            JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend);
            return chart;
        }
    在这个方法里,我始终找不到是什么原因导致它不能初始化,StandardXYToolTipGenerator这个CLASS包中也已经有了,请老兄再帮忙找找原因,谢了!