将java程序释出为可执行文件

写在前面:

我们知道,在用java写好程序后,我们可以先用javac命令.java编译文件,再用java命令运行.class文件。但是,我们希望的是我们的程序可以直接被终端用户使用(哪怕它很简单,只是一个简单的命令行交互或者是简单的图形界面)。那么,如何才能做到这一点呢?在用C或C++编程时,可以方便地用gcc命令将文件编译为.exe文件,点击即可运行。但是java中该如何做到类似的效果呢?这篇文章将会帮助大家建立本地可执行java文件。

1.程序内容

我们借鉴上一篇博客中的双按钮监听机制的图形界面程序,代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyApp {
    JFrame frame;
    JLabel label;
    boolean flag = false;
    int red = 0, green = 0, blue = 0;

    public static void main(String[] args) {
        MyApp app = new MyApp();
        app.go();
    }

    public void go() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        label = new JLabel("I am waiting for you!");

        JButton labelButton = new JButton("Change a label");
        labelButton.addActionListener(new LabelListener());
        JButton circleButton = new JButton("Change a circle");
        circleButton.addActionListener(new CircleListener());

        flag = true;
        MyDrawPanel myPanel = new MyDrawPanel();

        frame.getContentPane().add(BorderLayout.EAST, labelButton);
        frame.getContentPane().add(BorderLayout.SOUTH, circleButton);
        frame.getContentPane().add(BorderLayout.WEST, label);
        frame.getContentPane().add(BorderLayout.CENTER, myPanel);

        frame.setSize(300, 300);
        frame.setVisible(true);
    }

    class LabelListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            label.setText("OhCh!");
        }
    }

    class CircleListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
                flag = true;
                frame.repaint();
        }
    }
    class MyDrawPanel extends JPanel { 
        public void paintComponent(Graphics g) { // this method is called every time the button is clicked
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            if (flag == true) {
                red = (int) (Math.random() * 255);
                green = (int) (Math.random() * 255);
                blue = (int) (Math.random() * 255);
                Color randomColor = new Color(red, green, blue); 
                g.setColor(randomColor); // Set random color
                g.fillOval(70, 70, 100, 100); // Make a oval(circle)
                flag = false;
            } else {
                Color randomColor2 = new Color(red, green, blue);
                g.setColor(randomColor2); // Set random color
                g.fillOval(70, 70, 100, 100); // Make a oval(circle)
            }
        }
    } 

}

2.执行步骤

假设我们将MyApp.java文件存储在桌面文件夹的source文件夹中,并且桌面上有另一文件夹(为空)叫classes。
(1)首先编译MyApp.java文件,并将编译后的文件存入目标文件夹classes中。

C:\Users\Administrator\Desktop\source>javac -d ../classes MyApp.java

得到classes文件内的class文件如下图所示:
这里写图片描述

(2)在classes文件夹内新建名为manifest.txt的文件,并打开,添加语句如下:

Main-Class: MyApp

这表示主程序在MyApp类中。
注意,该语句最后要加入换行,否则可能不能正常执行。

(3)使用jar命令

C:\Users\Administrator\Desktop\source>cd ../classes
C:\Users\Administrator\Desktop\classes>jar -cvmf manifest.txt app1.jar *.class

在classes文件夹内得到一个新的文件,如下图所示:
这里写图片描述

我们可以双击这个程序,希望它能够运行。
得到如下图所示:

经测试,程序可以正常执行。

这里写图片描述
注意1:上图经过点击放大处理。
注意2:没有安装JVM的机器无法运行Executable Jar File 文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值