我现在做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目录下,但除了图片文件外,其它的各种文件(我只试过各种文本文件),就不会下载下去了,而是每次都得从网络上去读。我觉得这个问题有点不太理解,也不太确定,我从没找到过这方面的相关资料,只是在实际过程中观察到的情况,希望听听老兄的见解
这样就可以知道了
很感谢你的帮助。参照你讲的做了,我仔细对比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相赠老兄的,非常的希望老兄能帮我解决这个疑惑之处!非常感谢!
如果用applet做一个客户端工具,那么一般都是企业内网的应用,传输速度都是很快的.而且操作该工具的人都应该具有一定权限的,所以如果applet用到的包不是特别大,传输的延时可以忽略,或者可以做一个log,提示信息加载中......
以上个人意见,不对请指正
但如果不是以这种方式来读取的,而是以url = new URL(getCodeBase(),"aa.txt")这处方式构造的文件,就分不同的情况了,我在缓存的目录上有两种发现,一是图片文件,这种文件会下载到缓存的file目录下,但除了图片文件外,其它的各种文件(我只试过各种文本文件),就不会下载下去了,而是每次都得从网络上去读。我觉得这个问题有点不太理解,也不太确定,我从没找到过这方面的相关资料,只是在实际过程中观察到的情况,希望听听老兄的见解
不过要注意一下,如果程序中用到了像class.forName等加载的类的话,这样做出来的可能会缺少一些类。
异常为:
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包中也已经有了,请老兄再帮忙找找原因,谢了!