【问题标题】:Creating a runnable program from Java sources with input parameters使用输入参数从 Java 源创建可运行程序
【发布时间】:2015-08-14 08:48:49
【问题描述】:

我用 Java 编写了一个程序,它使用 Heron 公式计算三角形的面积。

它是使用 NetBeans 编写的,在源代码中设置了三角形的边:

public class TriangleArea {

    public static void main(String[] args) {
        double side1=6;
        double side2=8;
        double side3=10;

        double s = (side1 + side2 + side3) / 2;

        double area = Math.sqrt(s * (s - side1) * (s - side2 ) * (s - side3));

        System.out.println("area of the triangle is " + area);
    }
}

我怎样才能把它变成一个可运行的程序,询问用户的三角形边,并可以通过双击它来运行?

【问题讨论】:

  • P.s - 将其转换为 exe 后,您可能希望接收 args[] 的边长参数:)
  • 创建jar文件并在任何安装了Java的机器上使用
  • 另外,用户不应该在编译后更改程序。您必须为用户找到其他输入值的方法,例如System.in 或类似 swing 的 GUI。
  • 对于初学者,你可能需要设计一些用户界面,如果你想与用户交互,你可以使用它,即摇摆。

标签: java netbeans


【解决方案1】:

要允许用户更改参数,您可以要求用户使用JOptionPane 输入它们,您也可以使用它来显示消息:

public class TriangleArea {

    public static void main(String[] args) {
        double side1 = getDouble("Length of the first side");
        double side2 = getDouble("Length of the second side");
        double side3 = getDouble("Length of the third side");

        double s = (side1 + side2 + side3) / 2;

        double area = Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));

        JOptionPane.showMessageDialog(null, "area of the triangle is " + area);
    }

    /**
     * Ask the user to input a double. Will continue asking until a valid double is input.
     * @param message
     * @return
     */
    public static double getDouble(String message) {
        while(true) {
            try {
                return Double.parseDouble(JOptionPane.showInputDialog(message));
            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(null, "That is not a valid number, try again");
            }
        }
    }
}

要允许用户通过在 Windows 中双击它来运行它,您可以从中构建一个 JAR 文件。我对 Netbeans 不熟悉,但根据 this answer 关于如何做到这一点的问题,您可以在以下位置启用它:

Project Properties -> Build -> Packaging -> Build JAR after compiling

JAR 应该会在您构建时出现在您的项目中。请注意,这将要求您的用户安装与您正在使用的版本相同或更高版本的 Java。

【讨论】:

    【解决方案2】:

    导出为可运行的 jar。

    Java 程序不能(不应该)编译成机器码(EXE 文件),它们只能编译成字节码(CLASS 文件)并使用 JVM 执行。

    程序编译后无法修改。您应该通过标准输入(或命令行参数或文件)获取用户的值

    通过标准输入获取值的最简单实现

    import java.util.Scanner;
    
    public class TriangleArea {
    
        public static void main(String[] args) {
            double side1=6;
            double side2=8;
            double side3=10;
    
        Scanner input = new Scanner(System.in);
        System.out.println("Enter side1");
        side1 = input.nextDouble();
        System.out.println("Enter side2");
        side2 = input.nextDouble();
        System.out.println("Enter side3");
        side3 = input.nextDouble();
    
            double s = (side1 + side2 + side3) / 2;
    
            double area = Math.sqrt(s * (s - side1) * (s - side2 ) * (s - side3));
    
            System.out.println("area of the triangle is " + area);
        }
    }
    

    【讨论】:

    • 您的意思是 EULA 禁止这样做?
    • 这不是问题的答案,因为它没有说明如何做。
    • @dotvav 字节码背后的主要原则是,只要机器上有 JVM(与机器无关),它们就可以在任何带有 jvm(x86、x64、ARM 等)的机器上执行。当您编译为 EXE 时,它只能在该特定机器上执行。这违背了目的,因此没有官方工具可以做到这一点。但是有第三方工具可以做到这一点,但使用它们需要您自担风险。
    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2016-01-10
    相关资源
    最近更新 更多