寫在前面:
我們知道,在用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 文件