2012-06-08 37 views
1

我需要运行PHP的一些Java代码,所以我发现这个PHP/Java桥UnsupportedClassVersionError

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

所以我下载的tomcat,把JavaBridge.war webapps目录中 和我工作的例子(我花了一段时间才知道这一点)

我甚至可以加载内置的java东西Java("java.lang.System") 并运行我自己的PHP代码的例子瓶子。

我不能做的事就是制作我自己的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> 

我把罐子里的... \ 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: [email protected]://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) 

我搜索发现这个对我的错误堆栈: What is the reason for UnsupportedClassVersionError?

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 

的版本是不同的,但这应该还是工作,所以我不要相信这是我的问题

+0

哪个版本的Java是tomcat引用的? –

+0

@subirkumarsao我试过一些东西,但无法得到一个很好的答案,我怎么能想到这个? – m1sk

+0

通常我们通过JAVA_HOME或JRE_HOME环境变量将Java指定给tomcat。如果不存在,请检查那些指定了正确版本的Java。保持编译器(jdk)和JVM(jre)版本相同,尽管它不是必须的。 –

回答

1

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

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

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

+0

tomcat是我的应用程序服务器吗?无论如何,如何检查JRE版本? – m1sk

+0

检查startup.bat/startup.sh。你可以看到tomcat使用的地方 –

相关问题