如何使用shell脚本调用JAVA类方法?

如何使用shell脚本调用JAVA类方法?,java,java-6,Java,Java 6,我一直在研究一个解决方案。需要使用shell脚本命令调用JAVA程序中编写的方法。是否有方法调用非main方法 我正在使用一个.sh文件来(启动和停止)程序。无论如何,我都可以编写一个脚本来调用非“Main”方法。只能从shell脚本调用Main方法 例如: class Test { public static void main(String []arg) { String input = arg[0]; if ("start".equals(i

我一直在研究一个解决方案。需要使用shell脚本命令调用JAVA程序中编写的方法。是否有方法调用非
main
方法


我正在使用一个.sh文件来(启动和停止)程序。无论如何,我都可以编写一个脚本来调用非“Main”方法。

只能从shell脚本调用
Main
方法

例如:

class Test
{
    public static void main(String []arg)
    {
        String input = arg[0];
        if ("start".equals(input))
            //call start method
        else if ("stop".equals(input))
            //call stop method
        else
            //define default behaviour
    }
}
壳牌公司

java -cp /path/class Test start
这将调用测试类的
main
方法,并通过
start
作为参数

-cp
表示java类文件的路径。 假设java的路径已经在环境中设置好了


EDIT:您不能直接调用非main方法,相反,您可以将参数传递给main方法,并根据输入(使用if-else)调用方法来启动或停止

只能从shell脚本调用
main
方法

例如:

class Test
{
    public static void main(String []arg)
    {
        String input = arg[0];
        if ("start".equals(input))
            //call start method
        else if ("stop".equals(input))
            //call stop method
        else
            //define default behaviour
    }
}
壳牌公司

java -cp /path/class Test start
这将调用测试类的
main
方法,并通过
start
作为参数

-cp
表示java类文件的路径。 假设java的路径已经在环境中设置好了


编辑:您不能直接调用非main方法,相反,您可以将参数传递给main方法,并根据输入(使用if-else)调用方法来启动或停止

如果您想从shell调用方法,它肯定是应用程序的入口点。只需使用main方法编写一个类来调用所需的方法,构建jar并将其作为常规java应用程序执行。

如果您想从shell调用方法,它肯定是应用程序的入口点。只需使用main方法编写一个类来调用所需的方法,构建jar并将其作为常规java应用程序执行。

给出以下MyFirstJavaProgram.java

public class MyFirstJavaProgram {

   /* This is my first java program.
    * This will print 'Hello World' as the output
    */

   public static void main(String []args) {
      System.out.println("Hello World"); // prints Hello World
   }
}
如果计算机上安装了正确的Java,则可以执行以下操作

C:\> javac MyFirstJavaProgram.java
C:\> java MyFirstJavaProgram 
Hello World

给定以下MyFirstJavaProgram.java

public class MyFirstJavaProgram {

   /* This is my first java program.
    * This will print 'Hello World' as the output
    */

   public static void main(String []args) {
      System.out.println("Hello World"); // prints Hello World
   }
}
如果计算机上安装了正确的Java,则可以执行以下操作

C:\> javac MyFirstJavaProgram.java
C:\> java MyFirstJavaProgram 
Hello World

有几种选择:

  • 一个简单的方法是:以某种方式“修复”要调用的方法。比如:主类解析一个数值参数,然后使用该参数“查找”要从表中调用的方法
  • 您可以使用反射实现一个
    main()
    方法,该方法从命令行读取方法名(甚至包括封闭类的名称),然后“按名称”执行
  • 您可以避免反射,并且基本上每个要调用的“其他方法”都有一个
    main()
    方法(当然,这意味着您最终拥有大量的类,每个类内部都有一个
    main()
  • 您可以研究:此工具允许您在特定JVM实例内运行python解释器

jython解决方案可能需要更多的工作,但如果您试图解决“现实世界”的问题,这应该是您的第一选择。

有几个选项:

  • 一个简单的方法是:以某种方式“修复”要调用的方法。例如:主类解析一个数值参数,然后使用该参数从表中“查找”要调用的方法
  • 您可以使用反射实现一个
    main()
    方法,该方法从命令行读取方法名(甚至包括封闭类的名称),然后“按名称”执行
  • 您可以避免反射,并且基本上每个要调用的“其他方法”都有一个
    main()
    方法(当然,这意味着您最终拥有大量的类,每个类内部都有一个
    main()
  • 您可以研究:此工具允许您在特定JVM实例内运行python解释器


jython的解决方案可能需要更多的工作,但如果你想解决一个“现实世界”问题是,这应该是您的第一选择。

有没有办法调用非main方法?不是直接调用,但解决办法是从main调用该方法。有没有办法调用非main方法?不是直接调用,而是从main调用该方法。您不能直接调用非main方法,而是可以将参数传递给main method和基于输入(使用if-else)调用方法来启动或停止。我认为这是一个XY问题----您实际想要实现什么?请提供一个您想要调用哪个方法的示例。查看下面的链接:[您不能直接调用非main方法,相反,您可以将参数传递给main方法并基于输入(使用if-else)调用方法来启动或停止。我认为这是一个XY问题----您实际想要实现什么?您可以提供一个示例来说明您想要调用哪个方法吗?请查看下面的链接:[考虑到问题所展示的编程技能水平,这些建议是不现实的。这种编辑更为平衡,因此我取消了否决票。感谢您的快速回归。是否有任何提示可以帮助您完全逆转决策并使您朝着赞成票的方向前进?;-)我认为@Batty answer对该用户来说是合适的,因此避免重复,也许可以扩展您的备选方案,以便为经验稍浅的用户提供更多指导。例如,使用一些简短的示例测试/运行工具。基于您的类工厂示例的简单示例下一步和enou可能非常直接和灵活gh。考虑到问题所展示的编程技巧水平,这些建议是不现实的。编辑更加平衡,因此我取消了否决票。感谢您的快速回归。是否有任何提示可以让您完全推翻决定并朝着赞成票的方向前进?;-)我认为@Batty answer对于这个用户来说非常合适,所以避免重复,也许可以扩展您的alter