php-java-bridge的使用

一、环境

操作系统:windows

java版本:1.8

php-java-bridge版本:7.2.1(最新版本)

服务器:nginx(用什么服务器应该不影响的)

二、操作

1、安装java:这个不用多说,网上很多教程,跟着操作安装和配置环境变量就可以了。

2、php环境:这个也有很多教程,相信如果需要看这个贴子的人,php环境是已经配置好了的。

3、解压php-java-bridge的压缩文件:

a.得到一个JavaBridge.war文件,将后缀改为jar

b.再解压刚刚的jar包,得到一个同名文件

c.JavaBridge\WEB-INF\lib刚刚解压得到的文件,这个文件路径找到JavaBridge.jar包,然后双击运行它。会启动一个监听端口,点击确定就会运行。在进程中可以看到

d.再将刚刚运行的JavaBridge.jar解压,得到同名文件夹JavaBridge。JavaBridge\META-INF将该文件夹路径下的java文件夹拷贝到php项目下。

e.运行下面一段代码,若有输出java的版本,当前时间等信息,则表示javabridge是正常运行的

<?php
require_once("java/Java.inc");

$system = new Java('java.lang.System');

$s = new Java("java.lang.String", "php-java-bridge config...<br><br>");

echo $s;

print 'Java version='.$system->getProperty('java.version').' <br>';

print 'Java vendor=' .$system->getProperty('java.vendor').' <br>';

print 'OS='.$system->getProperty('os.name').' '.

$system->getProperty('os.version').' on '.

$system->getProperty('os.arch').' <br>';

$formatter = new Java('java.text.SimpleDateFormat',

"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");

print $formatter->format(new Java('java.util.Date')).' <br>'.' <br>';
?>

运行结果:

三、引用java的包

1、在启动javabeidge时,会在同一个文件夹中生成一个同名的日志文件

打开日志文件,可以看到java.ext.dir的参数,后面的值是一个文件路径,就是放我们需要引用的jar包的地方。我的截图是null,之前我安装的是java15。后面重新装了java1.8就好了。这种问题没有太大的必要去纠结,不行换就好了,除非环境兼容的问题。

2、写一个简单的java类,然后打包,打包的命令也可以搜索到。如果报错“不是内部命令”的话,看一下classpath的设置有没有什么问题。

public class Test
 {
     private String name = "";
      //setter and getter
      public void setName(String name)
      {
          this.name = name;
      }
     public String getName()
     {
         return this.name;
     }
     //加法
     public float add(float num1, float num2)
    {
         return num1 + num2;
     }
 }

3、将test.jar包放到对应的路径下面,重启一下javabridge。一定要重启,否则包不会生效。

<?php 
require_once('java/Java.inc');
//下面是php调用自己编写的test.java的方法。
 $test=new Java("test");
 $test->setName("aaaaaaaaa");
 echo $test->getName();
 echo "bbb<br>";
?>

至此,大功告成

关于报错:

1、这种是包没有放对位置,或者放了包没有重启监听程序。我的理解是,当监听程序启动时,会去读取日志当中的路径下面的所有包。因为当监听程序打开后,我去删除包都删不掉,说的正在被使用。

2、这种是没有使用类的权限,可以看一下包本身的问题

Uncaught [[o:Exception]:"java.lang.Exception: Invoke failed: [[c:phpToJava]]->outPut([o:PhpParserString], [o:PhpParserString]). Cause: 
php.java.bridge.util.NoSuchProcedureException: static outPut([o:PhpParserString], 
[o:PhpParserString]). Candidates: [] VM: 1.8.0_181@http://java.oracle.com/" at: #-10 
php.java.bridge.JavaBridge.checkM(JavaBridge.java:1109) #-9 
php.java.bridge.JavaBridge.Invoke(JavaBridge.java:1048) #-8 
php.java.bridge.parser.Request.handleRequest(Request.java:426) #-7 
php.java.bridge.parser.Request.handleRequests(Request.java:509) #-6 
php.java.bridge.JavaBridge.handleRequests(JavaBridge.java:173) #-5 
php.java.bridge.http.JavaBridgeRunner.doPut(JavaBridgeRunner.java:203) #-4 
php.java.bridge.http.HttpServer.service(HttpServer.java:289) #-3 
php.java.bridge.http.HttpServer$Runner.run(HttpServer.java:205) #-2 
php.java.bridge.util.ThreadPool$Delegate.run(ThreadPool.java:60) #-1 
php.java.bridge.util.AppThreadPool$Delegate.run(AppThreadPool.java:58) #0 
D:\zhubao\application\libraries\java\bridge\Java. in 
D:\zhubao\application\libraries\java\bridge\Java.inc on line 223

虽然这个问题搞了一天多,网上有很多经验,眼睛已经看瞎。最后的结果是,平台给的那个java包根本就不能满足我们的需求,也就是说不用那个java包也行。我哭了。但是还是总结一下,如果有人需要就太好了。顺便也提醒自己,做事清前先看清楚,不要做了无用功。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值