当前位置: 首页 > 面试题库 >

使用PHP / Java桥对ClassNotFoundException进行故障排除

袁耀
2023-03-14
问题内容

我已经按照本教程http://www.dsl.uow.edu.au/~sk33/php5java.htm进行了操作,但最后还是尝试了

<?php

java_require('http://localhost/test/HelloWorld.jar');
$myObj = new Java('HelloWorld');

// display Hello World
echo (String) $myObj->getHelloWorld();


?>

我有这个例外

PHP致命错误:未捕获[o(Exception):“ java.lang.Exception:CreateInstance失败:new
HelloWorld。原因:java.lang.ClassNotFoundException:在java_require()路径中找不到HelloWorld。请检查路径以及SEL和档案权限。负责的VM:1.5.0_14@http://java.sun.com/,网址:#-10
php
java.bridge.DynamicJavaBridgeClassLoader.loadClass(DynamicJavaBridgeClassLoader.java:293)


问题答案:

您正在遵循的教程已有5年历史了,根据FAQ,java_require()不推荐使用:

为什么不推荐使用java_require()?

因为Java没有模块系统。

例如,如果应用程序A所需的库的较早版本已被缓存,则无法加载应用程序B所需的库“ lucene-2.3.1.jar”。
无论如何,尝试链接库都会在运行时导致“ NoClassDefFound”或“ NoSuchMethod”错误
。或者某些过程可能会抛出检查异常,即使它们没有声明它们。

为了保护PHP开发人员免受Java的“麻烦”的侵扰, 我从PHP / Java Bridge 6.0版中删除了动态类加载机制
;java_require()发出警告。

正确的Java模块系统必须使用特殊的Java VM挂钩,这些挂钩目前尚不存在。

如何加载Java库?

您应该按照Java独立版本或Java webapps文档中的说明链接Java应用程序。



 类似资料:
  • 问题内容: 如何检查服务器上发送的邮件有问题?我运行一个简单的测试: 测试输出哪个文本;但是,没有邮件到达。 我该如何追踪问题? 问题答案: 这是一个很长的故事。一些要点(假设mail()返回true,并且错误日志中没有错误): 发件人地址(“发件人”)是否属于您服务器上的域?如果不是,请这样做。 您的服务器是否列入黑名单(例如,在spamhaus.org上检查IP)?共享托管的可能性很小。 邮件

  • 问题内容: 我有一个名为Main.java的Java程序,它位于以下目录中: 当我尝试从“程序”目录运行Main.java时,一切正常,我使用了以下行: 但是当我尝试从主目录运行Main.java时: 我得到: 此错误的原因是什么? 问题答案: 这是由于您的类路径所致,该类路径将默认为当前目录。从中运行时,在当前目录中找到该类(因为该软件包似乎未设置,这意味着它是默认值)。因此,它在中找到类。 从

  • 问题内容: 我在Linux上使用PID 25426运行Java应用程序。运行时,我注意到: 该结果应如何解释? 我正在解决打开文件过多的问题,并试图了解此观察是否相关。 随着应用程序继续运行,条目数也有所不同(向上和向下)。 问题答案: java- 打开文件的过程。 25426- 这应该是实际的PID。如果没有,请通过发布标题让我们知道它是什么。 420 w-文件描述符编号,后跟打开方式。(读/写

  • 问题内容: 对Windows上的锁定文件进行故障排除 问题答案: Jetty会为Web应用程序缓冲静态内容,例如HTML文件,CSS文件,图像等。如果你使用的是NIO连接器,Jetty将使用内存映射文件来执行此操作。问题是在Windows上,内存映射文件会导致文件锁定,因此你无法更新或替换文件。实际上,这意味着你必须停止Jetty才能更新文件。 Remedy Jetty提供了一个配置开关,用于De

  • 如前所述,在Ubuntu上没有启用控制套接字虚拟服务器,在我们通过raddebug使用控制套接字之前,SUSE和CentOS上的默认安装需要进行一些调整。 CentOS 在CentOS上执行以下操作以使raddebug可用: 通过检查控制套接字(control-socket)虚拟服务器是否已在启用站点的目录下列出来确认它已启用: #> ls /etc/raddb/sites-enabled 编辑控

  • 初始设置 在创建并启动新的 Serene 应用程序之后,不能显示登录页,而当你打开浏览器控制台,却得到一条错误消息:找不到 Template.LoginPanel: 你可能使用了无效的解决方案名称,如 MyProject.Something (包含点’.’)。 当项目以这种方式命名时,模板系统将不能定位模板。 请不要在解决方案名称中使用点符号(’.’),如果必须使用点符号,可在创建解决方案之后再重