# 问题

在做 OJ 的时候,由于程序需要编译运行,出于安全性考虑,我选择利用类 ProcessBuilder ,一个通过命令行调用 Java 程序的类。

我在 Eclipse 中或者在 CMD 中执行利用类 ProcessBuilder 运行的程序都没有问题,然后利用 Tomcat 开启服务器厚,调用该程序一直报错。

提示:找不到或无法加载主类 Main。

# 排查

一般来说先排查输入参数有没有问题,显然能在 CMD 中可以执行的程序,参数不会有问题。

是不是包名的问题?也不是。在 CMD 中调用 OJ 保存下来的程序,是可以运行的。

这就很诡异了。其实那句报错提示很玄乎,因为它包括了两个方面:找不到主类Main,无法加载主类Main

# 核心

什么情况下会无法加载主类 Main?CLASSPATH 不正确的情况是一种

Tomcat 运行的时候,会自定义 CLASSPATH, 覆盖环境变量的 CLASSPATH。如下图,这是我修改之后的 CLASSPATH,原来的 CLASSPATH 可没有这么多。

# 解决

在 %TOMCAT_HOME%/bin/setenv.bat 中定义 CLASSPATH 即可。

例如:

SET JAVA_OPTS=-Duser.language=en
SET CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%APACHE_TOMCAT_HOME%\lib\servlet-api.jar;%APACHE_TOMCAT_HOME%\lib\tomcat-api.jar;C:\apache-tomcat8.5.9\webapps\onlineJudge\WEB-INF\classes\

最新文章

  1. Vagrant使用简介
  2. JDBC成绩管理系统
  3. 苹果API常用英语名词
  4. Andriod 按钮代码
  5. maven本地仓库的配置以及如何修改默认.m2仓库位置
  6. Team Queue
  7. [GDUT 决赛]--GCD,LCM——我是好人(数论)
  8. SIP基本呼叫
  9. JavaScript对象原型写法区别
  10. 【转载】makefile经典教程
  11. django rest-framework 4.REST的认证和权限
  12. Java进阶(二十四)Java List集合add与set方法原理简介
  13. LeetCode(67):二进制求和
  14. SQL assistant
  15. ajax之同步异步详解
  16. 专题--XOR之线性基
  17. C# __arglist 关键字
  18. Java类是如何默认继承Object的?
  19. position定位属性
  20. #C++初学记录 (第一次测试)(A - 复习时间 )

热门文章

  1. JNI:no implementation found in native...
  2. PHP移动互联网开发笔记(1)——环境搭建及配置
  3. js如何实现动态显示表格数据(点奇数显示奇数单元格内容)
  4. UiwebView and html
  5. 《Erlang程序设计》学习笔记-第2章 并发编程
  6. Android中再按一次退出实现
  7. #781 – 多个变换执行的顺序问题(Transform Order Matters)
  8. 学习web开发遇到几个细节问题
  9. 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍
  10. 数据结构 Tricks(一)—— 父节点和左右孩子索引号之间的关系