简单java程序在线测评程序

v一.前言

大家过年好!今年的第一篇博客啊!家里没有网,到处蹭无线!日子过得真纠结!因为毕设的需求,简单写了一个java程序在线测评程序,当然也可以在本地测试。

v二.思路

首先简单介绍一下思路:

1.得到java程序的源代码,不需要导入包。得到源码之后在前面加入”import java.util.*;”

2.通过JavaCompiler对象可以帮助我们将java源代码编译成class文件。

3.通过DiagnosticCollector对象可以获得编译过程中产生的编译信息。

4.通过StandardJavaFileManager对象管理生成的class文件,例如文件的存放位置。

5.StringSourceJavaObject对象可以对java源码进行包装并处理。

数据是控制台输入的,所以要重定向System.in(注意保存标准的输入流);另外程序的输出是到标准的输出流的,为了获得输出结果,我的方法是重定向输出流到ByteArrayOutputStream,然后利用ByteArrayOutputStream构造BufferedReader。

6.运行程序,通过java的反射机制,获得main函数的Method对象。

7.运行时间的计算:通过System.currentTimeMillis()方法。

8.程序所需内存:通过Runtime的freeMemory()方法。

9.异常信息的获取:StringWriter sw = new StringWriter();  e.printStackTrace(new PrintWriter(sw, true)); sw.toString();

v三.问题解决

1. JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 出现NullPointerException。

查看部分源码如下:

private static final String[] defaultToolsLocation = { "lib", "tools.jar"};private Class>findSystemToolClass(String toolClassName)throwsMalformedURLException, ClassNotFoundException {//try loading class directly, in case tool is on the bootclasspath

try{return Class.forName(toolClassName, false, null);

}catch(ClassNotFoundException e) {

trace(FINE, e);//if tool not on bootclasspath, look in default tools location (tools.jar)

ClassLoader cl = (refToolClassLoader == null ? null: refToolClassLoader.get());if (cl == null) {

File file= new File(System.getProperty("java.home"));if (file.getName().equalsIgnoreCase("jre"))

file=file.getParentFile();for(String name : defaultToolsLocation)

file= newFile(file, name);//if tools not found, no point in trying a URLClassLoader//so rethrow the original exception.

if (!file.exists())throwe;

URL[] urls={ file.toURI().toURL() };

trace(FINE, urls[0].toString());

cl=URLClassLoader.newInstance(urls);

refToolClassLoader= new WeakReference(cl);

}return Class.forName(toolClassName, false, cl);

}

}

打印 System.out.println(System.getProperty("java.home"));如下:

C:\Program Files (x86)\Java\jre6

defaultToolsLocation = { "lib", "tools.jar" }; 也就是最终到

C:\Program Files (x86)\Java\jre6\lib\tools.jar中寻找tools.jar

然而jre6\lib中没有tools.jar,而是在C:\Program Files (x86)\Java\jdk\lib中。最直接的办法就是将它复制进去就行了。

2.异常信息的获取。

3.输入流和输出流的重定向。

详细内容请看代码!

v四.代码

 View Code

五.运行结果显示

1.正常运行

运行时间: 16ms

内存使用: 225.5546875kb

运行结果:

5 4 3 2 1

2.编译错误

编译错误: Compiler Error: Main.java 8找不到符号

符号: 类 Scanner

位置: 类 Main:

Compiler Error: Main.java 8 找不到符号

符号: 类 Scanner

位置: 类 Main:

3.运行错误

(1)运行错误: java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.test.CompileAndRunJavaFile.compileAndRunJavaFile(CompileAndRunJavaFile.java:163)

at com.test.CompileAndRunJavaFile.main(CompileAndRunJavaFile.java:44)

Caused by: java.lang.StackOverflowError

at Main.fun(Main.java 4:)

at Main.fun(Main.java 4:)

(2)运行错误: java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.test.CompileAndRunJavaFile.compileAndRunJavaFile(CompileAndRunJavaFile.java:163)

at com.test.CompileAndRunJavaFile.main(CompileAndRunJavaFile.java:44)

Caused by: java.lang.ArrayIndexOutOfBoundsException: 6

at Main.main(Main.java 18:)

... 6 more

v六.测试程序

public classMain {public static voidfun(){

fun();

}public static voidmain(String[] args) {

Scanner scan= newScanner(System.in);int n =scan.nextInt();int[] array = new int[n];for(int i=0; i

array[i]=scan.nextInt();for(int i=0; i

System.out.print(array[i]+ " ");

System.out.println();//array[n+1] = 0;//fun();

}

}

java 在线测评_简单java在线测评程序相关推荐

  1. java服务器代码_简单java服务器

    [java]代码库import java.io.InputStream; import java.io.OutputStream; import java.net.*; public class Ch ...

  2. Java网络编程学习——简单模拟在线聊天

    Java网络编程学习--简单模拟在线聊天 学了java网络,也是该做个小案例来巩固一下了. 本次案例将使用UDP和多线程模拟即时聊天,简单练练手. 1.前提知识 需要知道简单的IO流操作,以及简单的U ...

  3. java web 编辑器_基于Java+web的在线Java编辑器 PDF 下载

    主要内容: 近些年,互联网技术飞速发展,越来 越多的人接触到了编程语言,同时更多的 人愿意去了解学习编程语言,但由于以往 的编程语言编译器安装复杂,且部分还需 要配置环境,所以一些想学习编程语言的 人 ...

  4. java 录屏_告别Java,更高效的在线录屏方法

    自从Chrome在2015年4月发布的42版本后,谷歌Chrome浏览器正式终止对NPAPI插件的支持,因为该插件在安全以及稳定性中都存在隐患.然后在同年9月发布的45版本中,谷歌已经取消了相应的选项 ...

  5. java ee6教程_《Java EE 6 企业级应用开发教程》怎么样_目录_pdf在线阅读 - 课课家教育...

    第1章 java EE概述 1.1 Java EE的产生与发展 1.2 Java EE 6架构 1.3 Java EE 6常用技术 1.4 Java EE 6特性 1.5 Java EE 6应用服务器 ...

  6. java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码

    原创 野狗菌 希望你能喜欢 今天 关于本文: 本文介绍一个简单Java爬虫,获取网页源码,爬取电话号码. 本篇教程用我的博客一个测试网页演示. --野狗菌[希望你能喜欢] 测试页面: https:// ...

  7. java设计游戏_用java设计实现一个简单的动作冒险类游戏

    用java设计实现一个简单的动作冒险类游戏 1.背景 这是java老师布置的本周作业,具体题目截图如下 2.分析 在UML图已经给出的前提下,此作业很容易.自己在此基础上,加了个简单的界面设计和玩家设 ...

  8. 用java编写计算器_用Java编写一个简单的计算器

    1.使用记事本或eclipse等编程工具,建立一个图形界面应用程序. 2.程序完成简单的四则计算功能 3.用户可以在名为Number1和Number2的文本输入框中输入2个操作数,然后点击下面的4个按 ...

  9. java 调用关系_【Java基础】几种简单的调用关系与方法

    直接上代码吧. class lesson4AB //同一个类下的public修饰的方法A,B可以相互调用 { public void A() { B();//等价于this.B(); } public ...

最新文章

  1. 第一百一十四节,JavaScript文档对象,DOM进阶
  2. swift_015(Swift 的函数)
  3. 从JVM的常见异常来看Tomcat中内存的设置
  4. 基于Mono跨平台移动应用开发框架发布Xamarin 3.0
  5. mysql 连接校对_教你轻松的掌握 MYSQL连接字符集和校对
  6. SQL server2017和ssms管理工具下载
  7. Activity与AppCompatActivity全屏实现方法
  8. 河南科技学院去年对口计算机分数线,河南科技学院录取分数线2021是多少分(附历年录取分数线)...
  9. c语言判断二叉树是不是二叉排序树_判断
  10. 11计算机专业vb试题答案,西华师范大学计算机VB试题及答案11
  11. IDEA 导入 SSM项目
  12. 阿里P4 - P14技能要求及对应薪资曝光
  13. 25 岁的 Linux 已经无处不在,它是如何毁了微软统治世界的计划?
  14. 如何知道计算机显卡内存,电脑显卡是什么 怎么查显卡显存【图文】
  15. 云服务器上部署 开源项目禅道
  16. 什么是FD.IO/VPP?
  17. Zynq-Linux移植学习笔记
  18. xfs文件系统损坏修复
  19. 将eclipse配置成可迁移,即直接复制就可以使用
  20. 涉密计算机与涉密网络管理制度,长沙理工大学网络涉密保密管理制度

热门文章

  1. el-input-number默认值为空怎么设置
  2. el-input-number 默认值设置失效
  3. Python性能分析优化及测试
  4. 安装VS2010的过程遇到VC10.0 Runtime组件安装失败怎么解决
  5. 圖譜謎宮(2019年6月28日於鄂爾多斯)
  6. 西工大计算机考研机试题练习(2019年-2014年)
  7. GooglePlay应用上架完整流程
  8. oracle缺少有右括号,oracle ORA-00907错误:缺少右括号
  9. 最全MySQL8.0实战教程 2 SQL语言基础
  10. Android设备唯一码的获取