Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建独立的jar文件_Java_Swing_Deployment_Installation_Executable Jar - Fatal编程技术网

Java 创建独立的jar文件

Java 创建独立的jar文件,java,swing,deployment,installation,executable-jar,Java,Swing,Deployment,Installation,Executable Jar,我使用Netbeans构建了一个jar文件,它在我的系统中运行良好。但是我想制作能够在所有系统中运行的jar文件,该文件具有JRE,即使在该系统中没有设置classpath,它也应该正常工作 package circle; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.Mous

我使用Netbeans构建了一个
jar
文件,它在我的系统中运行良好。但是我想制作能够在所有系统中运行的
jar
文件,该文件具有JRE,即使在该系统中没有设置
classpath
,它也应该正常工作

package circle;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Circle {


    public static void main(String[] args) {


        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Circle().createAndShowGUI(); 
            }
        });
    }

    private void createAndShowGUI() {
        JFrame f = new JFrame("Swing Paint Demo");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        f.add(new MyPanel());
        f.pack();
        f.setVisible(true);

    }

    class MyPanel extends JPanel {

        public MyPanel() {

        setBorder(BorderFactory.createLineBorder(Color.black));

        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
               startX=e.getX();
               startY=e.getY();
            }
        });

        addMouseMotionListener(new MouseAdapter() {
            public void mouseDragged(MouseEvent e) {
               X=e.getX();
               Y=e.getY();
               repaint();
            }
        });

    }



        public Dimension getPreferredSize() {
        return new Dimension(250,200);
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);       
        //g.setColor(Color.RED);
        //g.fillRect(squareX,squareY,squareW,squareH);
        g.setColor(Color.BLACK);
        g.drawOval(startX,startY,X-startX,Y-startY);
        g.fillOval(startX,startY,X-startX,Y-startY);
    }  


    }

        private int startX,startY,X,Y;
}

只需执行以下命令即可创建JAR文件:

jar -c excel.jar MANIFEST.MF *.class
MANIFEST.MF文件应包含以下行:

Main-Class: createExcel
<>但请考虑以下提示:

有几种方法:

  • 创建一个jar文件并将您的类(没有依赖项)放在那里。使用一些工具(任何IDE都有)来完成这项工作,并使用main函数指定类。您也可以从命令行手动执行此操作。当用户想要运行它时,他应该指定类路径,并且所有依赖项都应该在该类路径中

  • 创建相同的jar并创建.bat或.sh文件,在其中设置类路径并运行jar

  • 使用一些特殊工具创建跨平台安装程序(但好的工具不是免费的)


  • 请记住,Netbeans可以为您提供很多帮助;)

    您可以使用
    ant
    脚本来构建可运行的JAR

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <project default="create_run_jar" name="Create Runnable Jar for Project SimpleApp with libraries in sub-folder">
        <!--ANT 1.7 is required -->
        <target name="create_run_jar">
            <jar destfile="C:/Workspaces/SimpleApp/SimpleApp.jar">
                <manifest>
                    <attribute name="Main-Class" value="SimpleApp"/>
                    <attribute name="Class-Path" value=". SimpleApp_lib/lib1.jar SimpleApp_lib/lib2.jar"/>
                </manifest>
                <fileset dir="C:/Workspaces/SimpleApp/bin"/>
            </jar>
            <delete dir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
            <mkdir dir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
            <copy file="C:/path/to/lib/lib1.jar" todir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
            <copy file="C:/path/to/lib/lib2.jar" todir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
        </target>
    </project>
    
    
    

    在本例中,项目的
    SimpleApp
    依赖于两个库:
    lib1.jar
    lib2.jar
    ,它们被输出到
    bin
    ,其中
    MANIFEST.MF
    具有指定的属性

    下面的帖子简要介绍了如何使用ANT创建一个应用程序:

    这篇文章解释了任务如何帮助创建类路径清单条目(使可执行JAR的构造更健壮,更不容易出错):

    最后,一个更复杂的示例演示了在创建可执行jar时如何使用管理项目的第三方依赖关系:


    您是否在其他系统上测试过Jar文件?你确定它对这些不起作用吗?@Jeffrey:谢谢你编辑Kalyan的帖子。对于这个网站上的许多志愿者来说,英语不是他们的第一语言,甚至不是第二语言。要想弄清楚原始海报想要什么或想问什么已经够难的了,他们应该努力避免使用非标准的缩写,以避免变得更难。请确保在MANIFEST.mf中添加“Main Program”参数。您应该使用唯一的包名,以避免在其他项目中使用jar时出现名称空间冲突。推荐的名称空间方案是使用还原的域名方案,例如com.google.maps或org.apache.tomcat。。。您不必实际拥有域,但仅仅圈可能是不够的。要为最终用户提供非常简单的体验,请使用启动框架。它提供自动更新,桌面集成,启动屏幕。。JWS可以在任何有J2SE的操作系统上工作,并且由Oracle提供和支持。类需要在Jar中(可能是数字签名的),以便使用JWS进行部署。但是,它不需要清单,因为这些详细信息是在启动文件(基于JWS的
    .jnlp
    文件类型)中提供的。。我明白了,这次从不同的方向来参加“JWS不好”。)Netbeans是开源的,是一个很棒的工具,GetDown也是开源的,也是一个很棒的工具;)。继续为使用“好/更好”等充满价值的术语提出这些愚蠢的理由,我需要连续投票否决这些答案。请帮我省力。如果您希望指出“功能X由工具A提供,但不是工具B提供”,请使用该功能,但不要使用价值判断。然后我们可以讨论一下JWS提供的东西,这些东西在任何第三方工具中都找不到如果您想表明您的想法与其他想法相反,只需说出您的想法并与其他工具进行逻辑比较即可;)然后社区将作出判断!我可以用GetDown升级JRE,所以如果你能用JWS做到这一点,请告诉我,我将非常感激并感谢你。我在这里的参与不是为了投票,只是因为我喜欢分享知识和向你们这样有知识的人学习。我们可以就GetDown和JWS或其他技术的特性进行友好的聊天,并在这里与社区共享结果。那么,为什么要说对方愚蠢和谴责呢!“我可以用GetDown升级JRE”与此无关。JRE是自动更新的。OtohJWS提供了指定应用程序的功能。JRE版本要求。因此,如果一个JWS应用程序。需要一个特定的微版本,它可以指定它。