如何在Applet中引用jar中的资源文件

2016-02-19 16:28 9 1 收藏

下面图老师小编跟大家分享如何在Applet中引用jar中的资源文件,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

【 tulaoshi.com - 编程语言 】

  如果想要做一个比较漂亮的Applet让人家使用,一定会加上很多资源,比如图片或者声音文件什么的。

  sun提供了一个有用的工具,jar。这个工具可以把这些资源文件合在一个文件里,避免频繁的http request,

  而且下载的jar文件可以被缓存,很爽吧。

  但是如何正确引用jar中的资源呢?

  比如我们打算显示一个图片按钮,图片相对路径为./img/Logo.gif,你可以自己随便找一个gif图片。

  让我们来看看我们想当然的做法。

  

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ImageButtonApplet extends JApplet
{
private String path = "/img/Logo.gif";
private ImageIcon LogoButtonIcon = new ImageIcon(path);
/**Initialize the applet*/
public void init()
{
try
{
if (LogoButtonIcon == null)
throw new Exception("cannot get the image!");
JButton iButton = new JButton(LogoButtonIcon);
Container cp = this.getContentPane();
cp.add(iButton);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

  这样子编译之后,把ImageButtonApplet.class和Logo.gif保持相对路径打进jar里面,对应的HTML页面代码为APPLET CODE = "ImageButtonApplet.class" CODEBASE = "." ARCHIVE = "test.jar" WIDTH = "200" HEIGHT = "200"/APPLET,由于使用了Swing,

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  经过HTMLConverter预处理之后,本以为能够一举成功,打开页面却发现,抛出异常:

  java.security.AccessControlException: access denied (java.io.FilePermission /img/Logo.gif read)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  这件事情也郁闷了我很久,反复试验,不管path相对路径还是什么,都不能顺利实现。

  后来我研究了jdk自带的demo,发现demo在引用资源的时候,采用这样的方法 getClass().getResource(String sourceName);

  getClass()是Object的方法,返回一个对象的运行时类型,即CLass对象。

  原来Class对象有getResource方法,在API文档中就是这样写的:

  

public URL getResource(String name)
Finds a resource with a given name. This method returns null if no resource with this name is found. The rules for searching resources associated with a given class are implemented by the * defining class loader of the class.
This method delegates the call to its class loader, after making these changes to the resource name: if the resource name starts with "/", it is unchanged; otherwise, the package name is prepended to the resource name after converting "." to "/". If this object was loaded by the bootstrap loader, the call is delegated to ClassLoader.getSystemResource.
Parameters:
name - name of the desired resource
Returns:
a java.net.URL object.
Since:
JDK1.1
See Also:
ClassLoader

  如法炮制,我把原来的

  private ImageIcon LogoButtonIcon = new ImageIcon(path);

  改成

  private ImageIcon LogoButtonIcon = new ImageIcon(getClass().getResource(path));

  编译,jar,run,成功,无论是本机打开还是放到http服务器中,都没有问题了。

  这就是在Applet中引用jar中资源文件的KEY!

来源:http://www.tulaoshi.com/n/20160219/1612191.html

延伸阅读
标签: word
如何在word中插入子文件   具体操作步骤如下: 步骤1:在主控文档中,将插入点置于要插入子文档的位置,单击主控文档组中的插入按钮如图1所示。 步骤2:打开插入子文档对话框,选择要插入的文档,单击打开按钮,文档被作为一个子文档插入到主控文档中,如图2所示。 知识库:如果要断开子文档与主控文档之间的链接...
    Director对媒体的支持不如Authorware好,不过非常庆幸的是有很多极酷的 Xtras 外部插件可以完美地解决这一问题。     其中最具代表性的恐怕就是DirectMedia了。 它可以在不安装任何其它支持软件的情况下直接播放AVI、MOV、Mpeg及多种音乐文件,效果一流。 你只需要在插入中选 Tabuleiro Xtras Direct...
    Director对媒体的支持不如Authorware好,不过非常庆幸的是有很多极酷的 Xtras 外部插件可以完美地解决这一问题。     其中最具代表性的恐怕就是DirectMedia了。 它可以在不安装任何其它支持软件的情况下直接播放AVI、MOV、Mpeg及多种音乐文件,效果一流。 你只需要在插入中选 Tabuleiro Xtras DirectMed...
本文介绍如何在VC资源文件中加入自己的声音资源,使自己的应用程序可以播放声音。 1、首先用文本编辑器(如记事本)打开资源文件(.rc文件) 在最后加入自己的声音资源,如下IDW WAVE "c:\\kav\\sound\\virus.wav" 保存资源文件。 2、在应用程序中要播放声音的地方启动另一线程,用来播放声音: AfxBeginThread((AFX_T...
标签: Java JAVA基础
  下面通过一个例子来说明,这个例子包括2个java文件和一个mf文件: 文件1:Frame1.java package testjar; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Frame1 extends JFrame {   JPanel contentPane;   BorderLayout borderLayout1 = new BorderLayout();   //Construct the ...

经验教程

846

收藏

71
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部