簡體   English   中英

創建.jar文件

[英]Create .jar File

所以我在創建 working.jar 文件時遇到了問題。 我最初的目標是創建應用程序,一個簡單的應用程序,幾乎沒有任何功能,您只需單擊並啟動,無需 ide 或控制台。 比如記事本。 但這就是問題開始的地方。 我以為我可以創建 .jar 文件,然后將 an.exe 輸出並進行測試。 但這些似乎都不起作用。 這是我編譯的源文件。class 然后制作了一個.jar 文件:

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.*;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;


public class GuiScreenLink extends Frame implements ActionListener
{
    Button OpenLink, TakeScreenshot;
    Desktop desktop;
    URI link;
    BufferedImage img;
    Robot robot;
    File newFile;
    
    public GuiScreenLink()
    {
        setLayout(new FlowLayout()); 
        OpenLink = new Button("OpenLink");
        TakeScreenshot = new Button("TakeScreenshot");
        OpenLink.setBackground(Color.WHITE);
        TakeScreenshot.setBackground(Color.WHITE);

        add(OpenLink);
        add(TakeScreenshot);

        try {
            link = new URI("https://www.google.com/");
        } catch (URISyntaxException ex) {
            Logger.getLogger(GuiScreenLink.class.getName()).log(Level.SEVERE, null, ex);
        }

        OpenLink.addActionListener(this);
        TakeScreenshot.addActionListener(this);

        addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
    }
    
    /**
     *
     * @param ae
     */
    @Override
     public void actionPerformed(ActionEvent ae)
    {
        String str = ae.getActionCommand();

        if(str.equals("OpenLink"))
        {
            desktop = Desktop.getDesktop();
            try {
                desktop.browse(link);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        else if(str.equals("TakeScreenshot"))
        {
            try
            {
                robot = new Robot();
            } catch (AWTException e) {
                throw new RuntimeException(e);
            }
            img = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
            newFile = new File("Screenshot");
            try
            {
                ImageIO.write(img,"png", newFile);
            } catch (IOException e)
            {
                throw new RuntimeException(e);
            }

        }
        repaint();
    }

    public static void main(String[] args) 
    {
        GuiScreenLink app = new GuiScreenLink();
        app.setSize(new Dimension(200,200));
        app.setTitle("Keys");
        app.setBackground(Color.DARK_GRAY);
        app.setVisible(true);
    }
}

然后我這樣做了:

javac *.java
jar -cfv program.jar *.class

因此,在我嘗試執行 .jar 文件之后,什么也沒有發生。 但是在 IDE 中一切正常。 這個問題有什么解決辦法嗎? 如果有的話,我以后如何制作一個.exe文件以在windows上啟動它?

首先,JAR 永遠無法單獨執行,但需要 Java 運行時環境。 直到 Java 8 分發了一個 JRE。 用戶安裝了它,從那時起,他們可以通過雙擊 Windows 上的 JAR 文件來啟動“可執行 JAR”。

“可執行 JAR”必須在其清單中指定主要的 class,如Java 教程中所示。

在較新版本的 Java 中,您可以創建一個模塊並使用該模塊使用名為jlink的工具創建自定義運行時映像(參見例如https://www.baeldung.com/jlink )。 如果需要, jlink還會創建啟動器。

使用jpackage您可以創建本機圖像(段https://www.baeldung.com/java14-jpackage )。

要使用 -jar 參數執行 jar 文件,您必須將清單添加到 jar 文件中,至少指定包含 main 方法的 class。

為此,您可以簡單地將-e=CLASSNAME或 --main --main-class=CLASSNAMEjar的調用中。

您可以在 oracle 文檔頁面的Java® 開發工具包版本 17 工具規范中找到 jar 工具的完整描述。

但我寧願建議您開始使用像Apache Maven這樣的構建工具,它將為您處理依賴關系、構建和打包(= 創建 jar 文件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM