java作为一个跨平台的程序语言,虽说给程序员带来了方便,但是还是苦了用户。因为运行java程序需要装java虚拟机,版本如果不对还容易启动不来。
这里说一下把自己写的java程序打包成jar我们的方法。下面是一个简单的使用swing库的界面程序,保存为test_2ButtonChange.java
import javax.swing.*; import java.awt.*; import java.awt.event.*; //使用两个按钮分别控制图像颜色、文字的变化,互不干扰,使用内部类完成 class test_2ButtonChange{ public static void main(String[] args) { doAction go = new doAction(); go.begin(); } } class doAction{ private JButton color_Button; private JButton text_Button; private JFrame frame; private colorWidget myOval; private JLabel myText; private colorListener cListener; private labelListener lListener; private Integer i = 0; public void begin() { cListener = new colorListener(); lListener = new labelListener(); myOval = new colorWidget(); frame = new JFrame(); color_Button = new JButton("改变颜色"); text_Button = new JButton("改变文字"); myText = new JLabel(i.toString()); color_Button.addActionListener(cListener); text_Button.addActionListener(lListener); frame.getContentPane().add(BorderLayout.SOUTH,color_Button); frame.getContentPane().add(BorderLayout.CENTER,myOval); frame.getContentPane().add(BorderLayout.NORTH,text_Button); frame.getContentPane().add(BorderLayout.EAST,myText); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500,300); frame.setVisible(true); } class colorListener implements ActionListener{ public void actionPerformed(ActionEvent event) { frame.repaint(); } } class labelListener implements ActionListener{ public void actionPerformed(ActionEvent event) { i++; myText.setText(i.toString()); } } } class colorWidget extends JPanel{ /** * */ private static final long serialVersionUID = -460185823252881743L; public void paintComponent(Graphics g) { int red = (int)(Math.random() * 255); int green = (int)(Math.random() * 255); int blue = (int)(Math.random() * 255); Color randomColor = new Color(red,green,blue); g.setColor(randomColor); g.fillOval(10, 10, 400, 100); } }
- 命令行
使用命令行的方法,可以在没有IDE的时候打包JAR。(Linux下更常用)
1.编译:javac test_2ButtonChange.java
编译命令我相信没有什么疑惑。
2.创建mf.txt来描述哪个类带有main方法。
这一步很重要,否则打包好的jar也不能运行。新建一个文本文件,叫什么都可以,里面填写这个java程序的信息,比如:
Manifest-Version: 1.0 Class-Path: Created-By: 1.6.0_06 (Sun Microsystems Inc.) Main-Class: test_2ButtonChange
注意最后一行换行。Main-Class:test_2ButtonChange即是包含了main方法的类。
3.开始打包.jar文件:jar -cvmf mainfest.txt app.jar *.class
mainfest.txt表示第二步新建的文件,app.jar表示我们待生成的jar文件的名字,*.class表示第一步编译好的那些class文件。我这里演示的时候这些文件都放在一起,所以没有加路径。如果编写程序的话最好把.java源文件和生成的.class文件分开放在不同文件夹里,这时候写命令行就要加相对或绝对路径。
4.验证.jar文件是否能打开:直接双击app.jar,或使用命令行java -jar app.jar
- 使用IDE(eclipse)
IDE就很方便了。打开eclipse,点击文件-导出
选择java-jar文件,下一步:
选择你的工程,比如test_2ButtonChange,下面选择输出的jar文件。点下一步。
一直点下一步,知道出现选择入口点的类,如下。选择你含有main方法的类,最后完成即可:
生成了一个jar文件,效果和命令行的类似。
现在,只要有java虚拟机(JRE),在任何平台都可以运行这个jar,这就是java语言的优势之处。下次我会讲一下怎样把这个jar再打包成exe文件,毕竟在windows系统下可执行文件最好还是exe,这样更加方便用户使用。
2017年我在代码审计知识星球里曾经发过一个经典的配置文件漏洞模型: 当时大家真是脑洞大开,想出了很多解决方法。刚好今天看到奇安信发表的一篇文章《这是一篇“不一样”的真实渗透测试案例分析文章》提到一个Discuz后台getshell漏洞,也涉及了相关知识,我们…
请登录后发表评论
注册