实验十五  GUI编程练习与应用程序部署

实验时间 2018-12-6

学习总结:

理论部分:

◼ JAR文件◼ 应用程序首选项存储◼ Java Web Start

JAR文件:

1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面程序就可以直接双击图标运行。

2.jar文件(Java归档)既可以包含类文件,也可包含诸如图像和声音这些其它类型的文件。

3.JAR文件是压缩的,它使用ZIP压缩格式。

jar命令
1 jar命令格式:
jar {ctxui} [vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
2 Jar命令选项(教材581页表13-1):
– -c 创建一个新的或者空的存档文件并加入文件。
– -C 暂时改变到指定的目录
– -e 在清单文件中创建一个条目
– -f 将JAR文件名指定为第二个命令行参数
– -i 为指定的JAR文件产生索引信息
– -m 将一个清单文件(manifest)添加到JAR文件中
– -M 不产生所有项的清单文件(manifest)
– -t 列出存档内容的列表
– -u 更新已存在的JAR文件
– -v 生成详细的输出结果
– -x 解压存档中的命名的(或所有的〕文件
– -0 只存储方式,不用ZIP压缩格式

(1) 创建JAR文件
jar cf jar-file input-file(s)
c---want to Create a JAR file.
eg: 1) jar cf MenuTest.jar *.class *.gif
f---want the output to go to a file rather than to stdout.
2) jar cvf MenuTest.jar *.class *.gif
v---Produces verbose output to stdout.
3) jar cvf MenuTest.jar *
*---create all contents in current directory.
4) jar cv0f MenuTest.jar *
0---don't want the JAR file to be compressed.

(2) 查看JAR文件
jar tf jar-file
t---want to view the Table of contents of the JAR file.
eg: 1) jar tvf MenuTest.jar
v---Produces verbose output to stdout.

(3) 提取JAR文件
jar xf jar-file [archived-file(s)]
x---want to extract files from the JAR archive.
eg: 1) jar xf MenuTest.jar copy.gif(仅提取文件copy.gif)
2) jar xf MenuTest.jar alex/copy.gif(仅提取目录alex下的
文件copy.gif)
3) jar xf MenuTest.jar(提取该JAR中的所有文件或目录)

(4) 更新JAR文件
jar uf jar-file input-file(s)
u---want to update an existing JAR file.
eg: 1) jar uf MenuTest.jar copy.gif
(5) 索引JAR文件
jar i jar-file
i---index an existing JAR file.
eg: 1) jar i MenuTest.jar

清单文件

⚫ 每个JAR文件中包含一个用于描述归档特征的清单文件(manifest)。清单文件被命名为MANIFEST.MF,它位于JAR文件的一个特殊的META-INF子目录中。

⚫ 最小的符合标准的清单文件是很简单的:Manifest-Version:1.0复杂的清单文件包含多个条目,这些条目被分成多个节。第一节被称为主节,作用于整个JAR文件。随后的条目用来指定已命名条目的属性,可以是文件、包或者URL。

⚫ 清单文件的节与节之间用空行分开,最后一行必须以换行符结束。否则,清单文件将无法被正确地读取。

– 创建一个包含清单的JAR文件,应该运行:

jar cfm MyArchive.jar manifest.mf com/*.class

– 要更新一个已有JAR文件的清单,则需要将增加的部分

放置到一个文本文件中,运行如下命令:

jar ufm MyArchive.jar manifest-additions.mf

运行JAR文件

⚫ 用户可以通过下面的命令来启动应用程序:

java –jar MyProgram.jar

⚫ 窗口操作系统,可通过双击JAR文件图标来启动应用程序。

资源

⚫ Java中,应用程序使用的类通常需要一些相关的数据文件,这些文件称为资源(Resource)。

–图像和声音文件。

–带有消息字符串和按钮标签的文本文件。

–二进制数据文件,如:描述地图布局的文件。

⚫ 类加载器知道如何搜索类文件,直到在类路径、存档文件或Web服务器上找到为止。

⚫ 利用资源机制对于非类文件也可以进行同样操作,具体步骤如下:

– 获得资源的Class对象。

– 如果资源是一个图像或声音文件,那么就需要调用getresource(filename)获得资源的URL位置,然后利用getImage或getAudioClip方法进行读取。

– 如果资源是文本或二进制文件,那么就可以使用getResouceAsStream方法读取文件中的数据。

⚫ 资源文件可以与类文件放在同一个目录中,也可以将资源文件放在其它子目录中。具体有以下两种方式:

–相对资源名:如data/text/about.txt它会被解释为相对于加载这个资源的类所在的包。

–绝对资源名:如/corejava/title.txt
⚫ ResourceTest.java程序演示了资源加载的过程。
⚫ 编译、创建JAR文件和执行这个程序的命令如下:
– javac ResourceTest.java
– jar cvfm ResourceTest.jar ResourceTest.mf
*.class *.gif *.txt
– java –jar ResourceTest.jar

1、实验目的与要求

(1) 掌握Java应用程序的打包操作;

(2) 了解应用程序存储配置信息的两种方法;

(3) 掌握基于JNLP协议的java Web Start应用程序的发布方法;

(5) 掌握Java GUI 编程技术。

2、实验内容和步骤

实验1: 导入第13章示例程序,测试程序并进行代码注释。

测试程序1

l 在elipse IDE中调试运行教材585页程序13-1,结合程序运行结果理解程序;

l 将所生成的JAR文件移到另外一个不同的目录中,再运行该归档文件,以便确认程序是从JAR文件中,而不是从当前目录中读取的资源。

王颖奇 20171010129《面向对象程序设计(java)》第十五周学习总结

更换位置后仍可运行

王颖奇 20171010129《面向对象程序设计(java)》第十五周学习总结

l 掌握创建JAR文件的方法;

代码:

package resource;

import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;

/**
 * @version 1.41 2015-06-12
 * @author Cay Horstmann
 */
public class ResourceTest
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(() -> {
         JFrame frame = new ResourceTestFrame();
         frame.setTitle("ResourceTest");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setVisible(true);
      });
   }
}

/**
 * A frame that loads image and text resources.
 */
class ResourceTestFrame extends JFrame
{
   private static final int DEFAULT_WIDTH = 300;
   private static final int DEFAULT_HEIGHT = 300;

   public ResourceTestFrame()
   {
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      //返回类,并查找带有给定名称的资源。
      URL aboutURL = getClass().getResource("about.gif");
      Image img = new ImageIcon(aboutURL).getImage();
      setIconImage(img);
      //读取文件夹内容,写入到文本区中
      JTextArea textArea = new JTextArea();
      InputStream stream = getClass().getResourceAsStream("about.txt");
      try (Scanner in = new Scanner(stream, "UTF-8"))
      {
         while (in.hasNext())
            textArea.append(in.nextLine() + "\n");
      }
      add(textArea);
   }
}
ResourceTest

相关文章:

  • 2021-08-05
  • 2021-09-30
  • 2022-01-12
  • 2021-10-13
  • 2021-10-17
  • 2022-12-23
  • 2021-09-25
  • 2021-12-02
猜你喜欢
  • 2021-06-13
  • 2021-09-25
  • 2021-12-15
  • 2021-06-06
  • 2021-05-20
  • 2021-07-20
  • 2022-03-01
相关资源
相似解决方案