Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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
如何从Perl调用Java程序?_Java_Perl - Fatal编程技术网

如何从Perl调用Java程序?

如何从Perl调用Java程序?,java,perl,Java,Perl,我是Perl新手,我正在尝试做一些事情,但找不到答案 我创建了一个Java项目,其中包含一个获取多个输入参数的主类 我想用Perl包装我的Java:我想创建一个Perl脚本来获取输入参数,然后将它们传递给Java程序并运行它 例如: 如果我的main名为mymain,我这样称呼它:mymain34hi(3,4和hi是输入参数),我想创建一个名为myperl的Perl程序,当它作为myperl34hi调用时,将把参数传递给Java程序并运行它 我该怎么做 $javaoutput = `java j

我是Perl新手,我正在尝试做一些事情,但找不到答案

我创建了一个Java项目,其中包含一个获取多个输入参数的主类

我想用Perl包装我的Java:我想创建一个Perl脚本来获取输入参数,然后将它们传递给Java程序并运行它

例如:

如果我的main名为
mymain
,我这样称呼它:
mymain34hi
3
4
hi
是输入参数),我想创建一个名为
myperl
的Perl程序,当它作为
myperl34hi
调用时,将把参数传递给Java程序并运行它

我该怎么做

$javaoutput = `java javaprogram`;
or
system "java javaprogram";
对于jar文件

$javaoutput = `java -jar filename.jar`;
or
system "java -jar filename.jar";
对于jar文件

$javaoutput = `java -jar filename.jar`;
or
system "java -jar filename.jar";

运行Java程序就像运行任何其他外部程序一样

你的问题分为两部分:

  • 如何将参数从Perl获取到Java程序
  • 如何用Perl运行程序
  • 对于(1)你可以这样做

    my $javaArgs = " -cp /path/to/classpath -Xmx256";
    my $className = myJavaMainClass;
    my $javaCmd = "java ". $javaArgs ." " . $className . " " . join(' ', @ARGV);
    
    请注意
    join()
    函数-它将把所有参数放入Perl程序,并用空格分隔

    对于第(2)项,您可以按照@AurA的答案进行操作

    • 使用
      system()
      函数

      my $ret = system("$javaCmd");
      
    这不会捕获(即放入变量
    $ret
    )命令的输出,只捕获返回代码,如
    0
    ,以获得成功

    • 使用反勾号

      my $out = `$javaCmd`;
      
    这将用Java程序的整个输出填充$out(您可能不希望这样)

    • 使用管道

      open(FILE, "-|", "$javaCmd");
      my @out = <FILE>
      
      open(文件“-|”和“$javaCmd”);
      我的@out=
      
    这更复杂,但允许对输出执行更多操作


    有关这方面的更多信息,请参见。

    运行Java程序就像运行任何其他外部程序一样

    你的问题分为两部分:

  • 如何将参数从Perl获取到Java程序
  • 如何用Perl运行程序
  • 对于(1)你可以这样做

    my $javaArgs = " -cp /path/to/classpath -Xmx256";
    my $className = myJavaMainClass;
    my $javaCmd = "java ". $javaArgs ." " . $className . " " . join(' ', @ARGV);
    
    请注意
    join()
    函数-它将把所有参数放入Perl程序,并用空格分隔

    对于第(2)项,您可以按照@AurA的答案进行操作

    • 使用
      system()
      函数

      my $ret = system("$javaCmd");
      
    这不会捕获(即放入变量
    $ret
    )命令的输出,只捕获返回代码,如
    0
    ,以获得成功

    • 使用反勾号

      my $out = `$javaCmd`;
      
    这将用Java程序的整个输出填充$out(您可能不希望这样)

    • 使用管道

      open(FILE, "-|", "$javaCmd");
      my @out = <FILE>
      
      open(文件“-|”和“$javaCmd”);
      我的@out=
      
    这更复杂,但允许对输出执行更多操作


    有关这方面的更多信息,请参阅。

    感谢您的快速回复;感谢您的快速回复,现在我得到:错误:无法找到或加载主类dbtools.jar您可能需要设置类路径。首先尝试在外部运行java程序,然后在内部使用相同的语法;感谢您的快速回复,现在我得到:错误:无法找到或加载主类dbtools.jar您可能需要设置类路径。首先尝试在外部运行java程序,然后在内部使用相同的语法。在windows计算机上运行java调用perl脚本:process=r.exec(“cmd/c perl D:\\perlexamples\\hello.pl”)\在windows计算机上运行java调用perl脚本:process=r.exec(“cmd/c perl D:\\perlexamples\\hello.pl”)\