將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 文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章