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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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配置成这样看看 .;配置文件中类的目录;
参考技术A ...你这理解有点绕啊...
虽然说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.
你原话不是说直接执行错了么...
算了,光看错误信息什么都看不出来,我给跪了..
完全听不懂你在说啥...

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

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

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

追答

没救!

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

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

参考技术D 那要看如何写的了、什么环境中的

使用maven的tomcat插件启动时报错问题

报错:‘build.plugins.plugin.version‘ for org.apache.tomcat.maven:tomcat7-maven-plugin is missing
解决方法:
一:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

在pom.xml引入的web(如上面的servlet-api)相关的依赖时,需要加入<scope>provided</scope>这个配置,意思是这个servlet-api的依赖包只在编译和测试时使用而不在运行时使用;因为web容器自身一般都会带这些依赖包,故配置上scope。假如不配置此项,启动tomcat时出现上述的异常,个人认为是由于我们自己在pom.xml引入的依赖跟web容器自己的一些依赖包冲突导致。
二:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>

8081 /

以上是关于main方法执行方法时报错,但是通过tomcat部署之后用网页方法访问就没问题的主要内容,如果未能解决你的问题,请参考以下文章

问题:程序编译通过,但是执行时报错:coredump

使用setListAdapter()方法时报错显示是未定义的方法

tomcat启动时报错java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter

Tomcat启动时报错,Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardCont

Tomcat停止时报错(java.net.ConnectException: 拒绝连接 (Connection refused))

Tomcat部署问题及解决方法