网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.影响性能的测试报告(数据库版).
.返回对象.
.WebLogic的研究之开发、部署EJB(.
.关于解决 Java 编程语言线程问题.
.Eclipse开发J2ME程序之Hello Wor.
.Java Applet编程之播放声音文件.
.怎样设计合适的接口.
.降低Java虚拟机的风险.
.Java游戏起步:(二)图形基础和.
.SERVLETS简介.
.使用HttpURLConnection访问web页.
.在J2ME中读取各种格式的文本文件.
.易混淆的几个JAVA术语(转贴).
.Java核心代码例程之:ServerSock.
.一步一步教你如何在linux下配置a.
.方便管理plugin或rcp的icons.
.创建Java中的线程池.
.把P2P进行到底:讲述Jxta的故事(.
.用XSLT和XML改进Struts.
.谈谈J2SE中的序列化(二).

Jar文件高级应用指南

发表日期:2008-1-5


    在应用程序中处理Jar文件简单介绍了如何使用Java.util.jar包提供的API操作jar文件,下面通过一个相对复杂的例子讲述一些Jar文件相关的高级应用。仔细读读这篇文章并参考一下相关的java doc会对你学习java语言有很大的帮助。

    下面的应用程序将实现从http服务器装载并执行一个jar文件的功能,比如你的Jar文件的地址为hello.jar。要实现这个功能我们应该首先建立与这个文件的连接然后通过MANIFEST的信息描述得到Main-Class的值,最后装载并运行这个class。这里面需要用到java.net和反射的一些重要知识。这个应用程序由两个类组成:JarClassLoader和JarRunner。

    JarClassLoader扩展了URLClassLoader,它有一个成员为URL类型的url变量。
  public JarClassLoader(URL url)
  {
     super(new URL[] { url });
      this.url = url;
  }
它的两个重要方法是getMainClassName()和invokeClass(),其中前者的目的是通过URL和jar取得连接后,读取MANIFEST的Main-Class属性从而得到应用程序的入点,这非常重要。得到入点后我们就可以通过反射机制装载和运行得到的主类。
public String getMainClassName() throws IOException {
    URL u = new URL("jar", "", url + "!/");
    JarURLConnection UC = (JarURLConnection)u.openConnection();
    Attributes attr = uc.getMainAttributes();
    return attr != null
                   ? attr.getValue(Attributes.Name.MAIN_CLASS)
                   : null;
}

  public void invokeClass(String name, String[] args)
 throws ClassNotFoundException,
        NoSuchMethodException,
        InvocationTargetException
    {
 Class c = this.loadClass(name);
 Method m = c.getMethod("main", new Class[] { args.getClass() });
 m.setAccessible(true);
 int mods = m.getModifiers();
 if (m.getReturnType() != void.class !Modifier.isStatic(mods)
     !Modifier.isPublic(mods)) {
     throw new NoSuchMethodException("main");
 }
 try {
     m.invoke(null, new Object[] { args });
 } catch (IllegalAccessException e) {
     // This should not happen, as we have disabled access checks
 }
 }
    URL u = new URL("jar", "", url + "!/");
    JarURLConnection uc = (JarURLConnection)u.openConnection();
这两段代码构造一个JarURLConnection的实例,注重!/的分隔符的意思是这个url表示的是整个jar文件。这样我们就建立了和jar文件的通信。方法中的后面两句话得到jar文件的主类。在invokeClass方法中,我们首先通过ClassLoader的方法得到包括程序入口的主类,然后得到main方法,判定main方法为我们需要的方法后则调Method的invoke方法执行这个应用程序。


上一篇:在应用程序中处理jar文件 人气:786
下一篇:熟练使用命令行工具开发Java程序 人气:901
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐