main方法执行方法时报错,但是通过tomcat部署之后用网页方法访问就没问题

main方法报的错误是类编译失败。
jdk1.6.0_12 myeclipse6.6, apache-tomcat-6.0.35,还需要别的环境信息吗?如何写的这个,不知道是想知道什么?我是直接在action中调用的main方法。@yangyu125 是直接执行main方法没有通过,报错了,然后部署到tomcat下面,通过action调的main方法,然后通过网页访问的action.

代码确实不好贴,太复杂了,里面各种调用,而只贴main方法的话,里面确实只有一个调用,没什么用。只贴一下错误信息吧。我之前不贴,是因为觉得没什么用。因为这个编译失败的类代码中是没有的,所以应该是框架生成的类,这个要解释就太麻烦了。因为我觉得应该是环境的问题,是希望见过这种问题的人帮忙指导一下,不是想那些连main方法怎么运行都不知道的人在那儿秀智商下限的。

既然编译失败,肯定是JDK没配置好或者你类里面的某个字写错了。环境变量只要配置一个path就够了,指向jdk的bin目录。像这种情况楼主最好是把源码跟错误的代码贴出来。既然你在tomcat下可以运行,那么证明类是正确的,之前的JRE没编译好了,可能使用了低版本的JRE去编译高版本的类文件。
试试更换个JRE看看。
楼下的有个人说的那个我挺赞同的。按理说编译错误不应该是运行的时候报错,那应该是框架使用了反射对某个配置文件里面的类加载编译。而main方法没有能在classpath中找到配置文件中的类。那么试试把classpath配置成这样看看 .;配置文件中类的目录;
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-08
...你这理解有点绕啊...
虽然说main是一般右键运行的程序入口,但放在web环境下,main 也就是一个类的一个方法罢了...
如果main里面涉及到了其他web的东西,没有部署启动服务器,怎么可能调的出来,不报错就有鬼了...追问

我说了啊,是先执行main方法,报错之后部署到tomcat下面的。执行main方法是在myeclipse里面做的。我天,你们难道都是通过文本文档写的程序么,没用过myeclipse和eclipse么?我在回复下面那个人的时候就说了啊,是直接右键,点run as java application,我没有说过,是在web环境下运行main方法。在web环境下是通过action调用main方法。

追答

哎,俗话说得好,要想学习新东西,脑袋里面的东西先倒掉比较好。
你这是完全抗拒其他思路的节奏啊....

直接右键运行main,只是在当前类从main入口进入程序,其他相关环境根本没有运作,当然要报错,在web里面用action 调用,环境已经运行起来了,调用main只是调用一个类的一个方法,并不是启动程序了...

带着固有的眼光看,理解完全偏向错误的方向了...我什么时候说你报错是在web下了?

追问

我通过main方法调用其他方法的时候,没有问题,只有这个启动了框架中的工作流,报错的信息也是跟工作流相关的。
我同事也是通过这种方式调用,他的没问题,所以我想问的是环境问题,重点不是怎么运行,在哪里运行。我提出来在web环境下可以运行只是为了证明我代码没问题,环境也是按照web需要的设置的。
之前有其他的同事也出现过这个问题,但是他是因为没有设环境变量,而且是在web工程下。

追答

是直接执行main方法没有通过,报错了,然后部署到tomcat下面,通过action调的main方法,然后通过网页访问的action.
你原话不是说直接执行错了么...
算了,光看错误信息什么都看不出来,我给跪了..
完全听不懂你在说啥...

第2个回答  2014-04-08
main方法的运行和在tomcat下运行是不太相同的,可能出现的问题就是类编译路径不同,导致目标地址错误,或者导致java文件无法找到。
具体的问题要看这个类里面的实现是什么了,以简单的异常来看,估计是要在运行时编译代码。。但是,编译失败了。。
第3个回答  2014-04-08
部署到 tomcat下的web工程,是不会执行 main方法的。

很有意思 main方法怎么能自己去执行? 要不你就贴代码?你光说哪个晓得你啥问题?追问

是在main方法所在的那个java类里,直接右键,然后点run as java application。然后就报了个类编译错误。

追答

没救!

在web项目里,执行main函数,是没有上下文的。就像同一份代码跑了两次。如果action里用到了某个对象,又再 main函数里去用这个对象,那他们是完全两个不同的对象,因为所属进程都不一样 web项目的进程属于 tomcat main的进程属于 javaw.exe

如果以为main函数启动了,就能拿到web项目运行时的状态信息,那就见鬼了。就算真要这养,牵涉到进程间通信。思维方式没对,main这个东西不应该出现在 web项目里。

第4个回答  2014-04-08
那要看如何写的了、什么环境中的

main方法执行方法时报错,但是通过tomcat部署之后用网页方法访问就没问...
既然编译失败,肯定是JDK没配置好或者你类里面的某个字写错了。环境变量只要配置一个path就够了,指向jdk的bin目录。像这种情况楼主最好是把源码跟错误的代码贴出来。既然你在tomcat下可以运行,那么证明类是正确的,之前的JRE没编译好了,可能使用了低版本的JRE去编译高版本的类文件。试试更换个JRE看看。

tomcat终于弄好了,为什么在eclipse启动Tomcat就报错Could not find th...
其实无非就是版本问题,JDK版本的问题。解决方法:在Eclipse窗口-->首选项-->Java-->编译器-->JDK一致性-->编辑器一致性级别,从5.0改到1.4就可以了。如果没有安装Eclipse,那就卸载jdk 安装较低版本的jdk环境即可。

Java程序的main()方法必须都写在类里面吗?
这样说吧,所有程序至少要有一个main方法。因为java虚拟机运行时,找的接口就是main方法,如果没有此方法,是不运行程序的你说的jsp servlet ,也是有main方法的,不过不是在你的程序中,而在应用服务器中,比如tomcat jboss 或者weblogi

如何把web项目加载项放入main方法中,main方法执行完,即关闭程序
方法嘛有一些,比如将main方法的内容放到一个静态块里面,加载web项目的时候就自动加载了,只是不保证最先执行.还有一个办法,只要你不嫌麻烦,可以新建一个java项目,在主方法里面执行内容,最后通过本地脚本加载web项目.比如Runtime.exec(String command) 方法启动tomcat里面的catalina脚本.这样可以完全分离.如果...

tomcat启动服务是报错,MySQL连不上,求解决办法
1、用图形界面测试连接(Navicat)远程进行访问的,mysql需要进行相关配置 2、使用main方法进行测试,看是不是配置文件有问题(下面的代码中配置自己放进去)\/\/druid使用main方法手工获取public static void main(String[] args) { Properties properties = new Properties(); properties.setProperty("u...

...在tomcat上运行通过,之后部署到weblogic上,访问可以访问,但是客户...
我的解决办法相当简单,把CXF依赖的jar文件打包成一个jar,然后将这个jar文件放置在%JAVA_HOME%\/jre\/lib\/ext目录下即可,extension classloader将加载这个jar,等到weblogic的类加载器启动的时候发现这些依赖的class已经被加载进来了,所以就不会再重复加载,从而达到目的。希望我的办法能对你解决问题有所...

部署多个Tomcat时出现报错怎么办?
在一台服务器部署多个Tomcat时,为了保证每个Tomcat运行在不同的端口上,每个Tomcat都需要在配置文件\/conf\/server.xml中进行相应的设置。若在启动时遇到问题,可按照以下步骤解决:1. **启动时报错 解决方案:检查每个Tomcat的配置文件,确保已正确设置不同端口。2. **项目启动时报错 解决方案:重新配置...

java程序一般应当含有main方法,因为它是所有java程序执行的入口。是对...
错误 java程序分为java应用程序+ 小应用程序applet 如果是java应用程序,一般应当含有main方法,因为它是所有java程序执行的入口 如果是applet, 不用main方法。。。由init初始化,start启用

...为什么main方法是程序的入口,他是什么逻辑运行的?
启动一个main方法,就是创建一个jvm虚拟机,所有的java代码都是都在这个jvm运行的。主类就是指带有执行入口main方法的类。java web程序,一般都是把你的web工程部署到web服务器,web服务器自己会有个主类,比如tomcat的org.apache.catalina.startup.Bootstrap,启动的时候就运行这个主类的main方法 ...

为什么servlet里没mian方法?然后里面编写的方法不用对象调用的?_百度...
第一个问题:servlet是由servlet容器来加载运行的,也就是有容器来调用,它里面应该有main方法。像tomcat就是一个servlet容器,说白了就是一个支持servlet的服务器。第二个问题:在servlet里面直接调用非静态方法是可以的,系统会默认在它前面加一个this对象。在非静态方法中可以调用任何方法,在静态方法中...

相似回答