当前位置: 首页 > 知识库问答 >
问题:

PHP/Java桥不支持ClassVersionError

臧亦
2023-03-14

我需要在php上运行一些java代码,所以我找到了这个

http://php-java-bridge.sourceforge.net/pjb/index.php

所以我下载了tomcat并放置了JavaBridge。我在webapps目录中找到了war,并让这些例子发挥了作用(我花了一段时间才弄明白这一点)

我甚至可以加载内置的java东西,并用我自己的PHP代码运行示例JAR。

我做不到的是制作自己的jar并运行它。我尝试了各种不同的编译器(Eclipse、Netbeans、命令行),但都没有用。

我正试着做这样的事http://www.developer.com/java/other/php-with-java-using-php-java-bridge-tutorial.html

这是我的java代码:

package m1sk;

/**
 *
 * @author M1sk
 */
public class Hello implements java.io.Serializable{

    String hi() {return "This is my hello message";}
    String hello(String name) {return "Hello" + name;}
} 

PHP代码:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        require_once ("java/Java.inc");
    //  $t1 = new Java("java.lang.System"); 
    //echo $t1->getProperties(); //this works
        $world = new java("m1sk.Hello");
      //  echo $world->hi();
      echo "Hello Working Thingy\n\n";
        ?>
    </body>
</html>

我把jar放在...\tomcat\webapps\JavaBridge\WEB-INF\lib和php文件放在...\tomcat\webapps\JavaBridge

当我测试http://localhost:8080/JavaBridge/mytest.php时,我得到以下错误:

javax.servlet.ServletException: java.lang.RuntimeException: PHP Fatal error:  Uncaught [[o:Exception]:"java.lang.Exception: CreateInstance failed: new m1sk.Hello. Cause: java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class m1sk.Hello) VM: 1.5.0_20@http://java.sun.com/" at:
#-13 org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1854)
#-12 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
#-11 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
#-10 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
#-9 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
#-8 java.lang.Class.forName0(Native Method)
#-7 java.lang.Class.forName(Class.java:242)
#-6 php.java.bridge.Util.classForName(Util.java:1518)
#-5 php.java.bridge.JavaBridge.CreateObject(JavaBridge.java:445)
#-4 php.java.bridge.Request.handleRequest(Request.java:458)
#-3 php.java.bridge.Request.handleRequests(Request.java:500)
#-2 php.java.bridge.http.C in C:\xampp\tomcat\webapps\JavaBridge\java\Java.inc on line 195

    php.java.servlet.fastcgi.FastCGIServlet.handle(FastCGIServlet.java:499)
    php.java.servlet.fastcgi.FastCGIServlet.doGet(FastCGIServlet.java:521)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    php.java.servlet.PhpCGIFilter.doFilter(PhpCGIFilter.java:126)

我在堆栈中搜索发现了这个错误:Unsupport tedClassVersionError的原因是什么?

C:\Users\M1sk\Desktop>java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b22)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

C:\Users\M1sk\Desktop>javac -version
javac 1.6.0_25

版本不同,但这应该仍然有效,所以我不认为这是我的问题

共有1个答案

郦兴德
2023-03-14

不支持ClassVersionError的原因是您的类文件是使用JDK的更高版本(如Java 7)编译的,而JRE是早期版本(如Java 6)。

如果您使用的是外部库,那么与您使用的JRE相比,外部库很可能是使用更新版本的Java编译器编译的。我建议您将JRE升级到最新版本。

如果您正在使用应用服务器来运行它,请务必检查您的应用服务器是否也在使用最新版本的JRE。您的环境变量可能指向最新版本的JRE,但您的应用程序服务器可能没有这样做。

 类似资料:
  • 问题内容: 我在Windows上使用tomcat 6。这是我正在测试的代码。 我添加了所有库。运行文件时,出现以下错误- 我想念什么? 问题答案: 只需将其添加到您的命令行中: -Dphp.java.bridge.php_exec = / usr / bin / php 问题解决了!

  • 本文向大家介绍为什么Java不支持<<相关面试题,主要包含被问及为什么Java不支持<<时的应答技巧和注意事项,需要的朋友参考一下 Java添加了运算符“ >>>”来执行逻辑右移,但是由于 逻辑和算术左移运算是相同的 ,因此Java中没有“ <<<”运算符。 来自Java的Shifts …

  • 在Apache上运行Php文件需要在服务器上启用。它允许Apache解析文件。可以解释apache中的Php代码并将HTML发送到Web服务器。 如果在服务器上启用了,则目录中将有一个名为的文件。还可以查看: 输出类似于以下结果: Apache中的Php处理程序 Apache中的Php处理程序常用的有以下几种 - mod_php CGI FastCGI suPHP mod_php 是最古老的PHP

  • DataSource 接口 不支持 timeout 相关操作 Connection 接口 不支持存储过程,函数,游标的操作 不支持执行 native SQL 不支持 savepoint 相关操作 不支持 Schema/Catalog 的操作 不支持自定义类型映射 Statement 和 PreparedStatement 接口 不支持返回多结果集的语句(即存储过程,非 SELECT 多条数据) 不

  • 问题内容: 当我尝试使用Java 7连接URL(支持TLS 1.2且以前与Java 7兼容的供应商URL之一)时,发现以下异常: 这样我就启用了,并且 在那之后我也遇到了同样的问题。然后,我将Java版本升级到8,这样它就可以连接到URL而没有任何SSL问题。 如本博客所述,在Java 8中,默认设置为TLS 1.2,并且可以使用Java 7中的属性调整TLS 1.2 。在Java 7中,如果我根

  • 问题内容: Java为什么不包括对无符号整数的支持? 在我看来,这是一个奇怪的遗漏,因为它们允许人们编写不太可能在意外大的输入上产生溢出的代码。 此外,使用无符号整数可以是一种自我证明的形式,因为它们指示无符号int打算保留的值永远不会为负。 最后,在某些情况下,无符号整数对于某些操作(例如除法)可能更有效。 包括这些的不利之处是什么? 问题答案: 在两行之间阅读时,我认为逻辑是这样的: 通常,J