草庐IT

java类加载器和运行时编译

尽管警告要我放弃目前的做法,但我目前看不到更好的方法来解决我的问题。我必须生成在运行时运行Java代码,然后编译它、加载它并引用它。问题是生成的代码导入了系统类加载器已经加载的代码(我想)——也就是说,代码存在于我的类路径中的一个jar中。(我在Java6上的Tomcat6Web容器中运行。)您可能会问自己为什么这是个问题-好吧我肯定不知道-但事实是我遇到了编译错误:/W:/.../parser/v0.5/AssignELParser.java:6:packagecom.xxx.yyy.zzz.configurationdoesnotexist根据互联网上的一些示例,我定义了以下类:c

java - 调用包含 hbm2ddl 任务的 ant 脚本时,Runtime.exec 会卡住吗?

为了启动一个ant脚本,我使用java.lang.Runtime类的exec方法,如下所示:Processprocess=Runtime.getRuntime().Exec(JAVA_HOMEANT_HOME-jar/lib/ant-launcher.jar-BuildFilefile.xml);这个方法,尽管看起来很简单,但是它带来了几个问题,在javadoc中描述如下:BecauseSomenativeplatformsProvideonlylimitedbuffersizeforstandardinputandoutputstreams,failuretopromptlywrit

java - 使用 Runtime.getRuntime().exec(command) 时用户输入到命令行;

我不认为这是可能的,但我一直在使用:Processp=Runtime.getRuntime().exec(command);在命令行上运行命令,但现在我遇到了这样一种情况,我正在运行的命令会要求一些用户输入,例如用户名。这无法通过正在执行的命令的参数来解决,有什么方法可以将用户名传递给同一命令行实例并继续吗?---编辑---我仍然无法让它工作。这些是命令行上的步骤:C:\someProgram.exeLogin:Passowrd:所以我需要在运行时提示时传递登录名和密码。我得到的代码不起作用:try{StringCMD="\"C:\\someProgram\"";Scannerscan

java - 将文件的字节数组加载到内存中

我正在尝试将jar文件直接加载到内存中,而不是将其放到HDD中。我尝试使用ClassLoader,但出现错误。这是我的代码:自定义类加载器publicclassCLS_ClassLoaderextendsClassLoader{privatebyte[]bArrData;publicCLS_ClassLoader(ClassLoaderparent,byte[]bArrData){super(parent);this.bArrData=bArrData;}publicClassloadClass(Stringname)throwsClassNotFoundException{retur

java - Tomcat 崩溃 : There is insufficient memory for the Java Runtime Environment to continue

我们正在运行一个用户数量较少的网络应用程序,大约7个,但显示图像的负载很高。最近我们升级到Java6u43和Tomcat6.036,在使用了一段时间(大约一周)后,tomcat服务崩溃了。重新启动后,它可以运行几天,或者只运行几个小时,然后再次崩溃。即使在重新启动服务器后它再次崩溃,我们甚至在Activity10分钟后看到了这种情况。在tomcat的bin文件夹中的hs_err_pid文件中总是有相同的信息。请参阅下面的完整错误消息示例。native内存总是不足,主要Activity线程始终是JavaThread“C2CompilerThread1”,但始终处于不同的方法中。我们在wi

Java教科书: "the size of an array must be known at compile time"

我刚刚浏览了我的一本旧教科书,发现了这段在Java中定义数组的文章:Aone-dimensionalarrayisastructuredcompositedatatypemadeupofafinite,fixedsizecollectionoforderedhomogeneouselementstowhichthereisdirectaccess.Finiteindicatesthatthereisalastelement.Fixedsizemeansthatthesizeofthearraymustbeknownatcompiletime,butitdoesn’tmeanthatal

java - 在 Java 程序中执行 Java 代码

我想创建一个应用程序,例如测量某个代码块的执行时间。在这种情况下,它应该具有如下结构:publicstaticlongmeasureExecution(Stringcode){longstart=System.nanoTime();executeCode(code);//我对箭头指定的方法很好奇,我需要某种占位符。这个方法应该如何实现?甚至可以在运行的Java应用程序中执行自定义Java代码吗?我在想它可以通过某种覆盖另一个方法主体来完成,但我不太清楚如何做。感谢您的意见! 最佳答案 你可以传递一个Runnable:publicst

java - 在运行时替换(覆盖)类实现 (Java)

是否有任何方法可以替换(覆盖)Java类实现,该实现已经由系统类加载器加载到另一个实现(以字节数组形式提供)?为了说明我的疑问,请遵循以下代码:publicclassMain{publicstaticvoidmain(String...args){Foofoo=newFoo();foo.print();ClassLoadercl=...Foofoo2=(Foo)cl.newInstance();foo2.print();}}第一个Foo的print()方法打印“Implementation1”,第二个Foo打印“Implementation2”。foo的第二个实例由类加载器从字节数组中

java - 当我接近 OutOfMemoryError 时,如何在 java 中确定?

我需要找出真正接近OutOfMemoryError的时间,以便将结果刷新到文件并调用runtime.gc();。我的代码是这样的:Runtimeruntime=Runtime.getRuntime();...if((1.0*runtime.totalMemory()/runtime.maxMemory())>0.9){...flushresultstofile...runtime.gc();}有更好的方法吗?有人可以帮我一下吗?编辑我知道我这样是在玩火,所以我想用一种更可靠、更简单的方法来确定我什么时候吃饱了。我目前正在使用Jena模型,所以我做了一个简单的检查:如果模型有超过550k

java - 如何在 java 的编译时检索 Long.MAX_VALUE 的字符串值?

是否有任何可能的方法使用运行时调用方法来设置常量编译时间值?在《SpringinAction》一书中,我得到了这段代码:privatestaticfinalStringMAX_LONG_AS_STRING=Long.toString(Long.MAX_VALUE);@RequestMapping(method=RequestMethod.GET)publicListspittles(@RequestParam(value="max",defaultValue=MAX_LONG_AS_STRING)longmax,@RequestParam(value="count",defaultVa