添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近线上就发生此情况,莫名其妙出现

Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com.lolo.jsis.common.SpecialCarEnum

查看源代码,类存在呀! what and why?
查看服务器,发现工程的jar 不见了,才想起原来因规避漏洞,把jar转移位置了。
因此,基本上确诊问题所在,就是jvm 根据启动路径找不到jar, 即就无法加载需要使用的类了…

比如你的jar包有三个class,一个主函数的类文件:Main.class,两个业务的:Service1.class,Service2.class,如果你的程序启动后,假设启动时并未用到两个业务类,当用户进行操作,当操作到第一步时会用到Service1.class中的代码,操作第二步时会调用Service2.class中的业务代码。以下业务代码简称S1,S2

这里分情况:

  1. 当用户还没进行任何操作时,即S1、S2还没被使用,当然也不会触发类加载,此时如果删除jar包,会发现java进程依然存在,但是如果用户此时去操作,就会报错,因为S1和S2还没被加载到jvm中,就被用户删了。
  2. 如果用户已经操作了第一步和第二步,再删除jar,则不影响。

删除前要看所有的class是否都被加载到内存中,如果没有被加载到内存,但是后面某一步操作却触发了类加载就会报错!

可以利用Runtime.getRuntime().exec Runtime.getRuntime().exec("cmd /c ping localhost -n 2 > nul && del Delete. jar "); 2表示2秒, Delete. jar 是文件名.
java 程序双击运⾏_双击 jar ⽂件运⾏程序 Java 应⽤程序 jar ⽂件可以由 JVM ( Java 虚拟机)直接执⾏,只要操作系统安装了 JVM 便可以运⾏作为 Java 应⽤程序的 jar ⽂件。可是,很多 朋友遇到⼀个难题,那就是下载了 jar ⽂件以后在Windows中不能⽤⿏标双击运⾏(或者双击运⾏以后使⽤WinRAR或其他压缩软件打开 了),这可怎么办? 1、Win7下的解决⽅法 注意:⽆论是Win7还是WinXP,都需要事先下载并安装 Java 虚拟机。 1)安装好 Java 虚拟机后,双击需要运⾏的 jar ⽂件或在 jar ⽂件上点击⿏标右键,在弹出的菜单中选择"打开⽅式" "选择默认程序"。 2)选择 JAVA 虚拟机的安装⽂件夹,如果安装的是 Java 7,安装⽂件夹⼀般为"C:\Program Files\ Java \jre7\bin"(具体⽂件夹请⾃⾏查 找),找到 java w.exe⽂件,点击"打开"按钮。 3) 这时已经设置了使⽤ java w.exe应⽤程序来打开 jar ⽂件,可是实际上这时双击 jar ⽂件还是没有反应,这是因为没有设置打开⽂件参数导 致的。 4) 在Windows开始菜单的搜索框中输⼊"regedit",在上⽅搜索出的⽂件regedit上点击⿏标右键,在弹出的菜单中选择"以管理员⾝份 运⾏"。 5) 在注册表编辑器中,找到"HKEY_CLASSES_ROOT\Applications\ java w.exe\shell\open\command",在其中⽂件打开命令中加 ⼊参数"- jar "(⽆引号),修改后的数值类似:""C:\ProgramFiles\ Java \jre7\bin\ java w.exe" - jar "%1""(只需要添加- jar 参数,⽆需修 改其他信息),保存并退出注册表编辑器。 2、XP下的解决办法 1)安装好 Java 虚拟机后,打开桌⾯上"我的电脑",点击菜单"⼯具" "⽂件夹选项"。 2) 在"⽂件夹选项"设置窗⼝中切换到"⽂件类型"标签。找找看其中的⽂件扩展名有没有. jar ,如果有,则选择. jar ⽂件,点击"更 改"按钮。如果没有. jar ,那么点击"新建"按钮新建⼀个. jar 扩展名。 3) 点击"⾼级"按钮,在出现"编辑⽂件类型"窗⼝中点击"新建"按钮,在弹出的"新操作"设置窗⼝中,将操作命名为"open",⽤ 于执⾏操作的应⽤程序为"C:\ProgramFiles\ Java \jre7\bin\ java w.exe" - jar "%1"(请勿填写引号,具体 JVM 的⽂件夹路径请根据实际 情况填写,⼀般位于C:\ProgramFiles\ Java 中)。 4)设置完成后退出保存退出即可。 3、注意事项 1)⽆论使⽤Win7还是WinXP操作系统,都需要提前安装 Java 虚拟机( JVM )。 2) jar Java 可执⾏程序,其打包格式使⽤zip格式压缩打包,因此有可能 被某些压缩软件当成压缩包打开,如果双击时使⽤压缩软件打开 了,可以如上⽂所述修改 jar ⽂件的默认打开⽅式,使其使⽤ Java 虚拟机来运⾏。 3)要使 jar ⽂件正常运⾏,其⽂件名不能为中⽂或其他特殊字符,如果按照本⽂操作还是不能运⾏,请尝试修改⽂件名为标准的英⽂⽂件 名。 4)如果上⾯的⽅法还不能解决,则是虚拟机没装好。学习 java 的⼈都知道,Jdk是可免安装的,只要⼀台机器安装了,将 java 的根⽬录拷贝 到另⼀台机器,然后配置环境变量即可开发 java 程序。但此种⽅法下双击可执⾏ jar 程序⽆法运⾏ java 程序,原因是安装jdk的过程中 在系 统注册⼀些信息,直接拷贝的 java 环境是不具备这些条件的。因此,解决办法是将JDK重装⼀遍(反正⼀两分钟就安装了)。
如果是Windows双击运行的话,可以先进入jdk的bin目录,运行jps,查看当前运行 java 的pid, 通过执行 taskkill /pid 13888 /f 命令(13888为查看到的pid号)
一个web应用部署到tomcat之后,WEB-INF中的lib目录下的 jar 文件,如果被使用到,是不能被 删除 的。这个是因为classloader打开了这些文件,这些文件被锁定了。这个现象在windows下存在,在linux下就不存在了。 其实这个问题在windows的JDK中似乎就有问题。就是使用URLClassLoader读取一个 jar 文件中的class,那么,这个 jar 文件 被锁定,这个...
编译完打开Person.class文件,这就是字节码文件,16进制的 然后我们 删除 掉Test. Java 文件,尝试运行没问题,这就是运行时的时候不需要. java 文件,只需要字节码文件 执行 java h -jni Person你 发现生成.h文件,也就是C++,这里知道 启动 类加载器的是C++写的就行 Jvm 是如何使用这些class文件的,就需要类加载器 类加载器把class字节码文件加载到运行内存中 其中,MyProgram. jar 应该替换为实际的 JAR 文件名,Manifest.txt应该替换为实际的Manifest文件名,com/example/*.class应该替换为实际的.class文件路径。 6. 打包完成后,可以使用以下命令运行程序: java - jar MyProgram. jar 其中,MyProgram. jar 应该替换为实际的 JAR 文件名。
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: interrupt (xxl-job) 14429 Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: interrupt (xxl-job) mistor: 本质原因是你设置了xxjob的任务超时时间【任务超时时间】很短了,被xxjob关闭了,把时间设置0或设置长一点 Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING 坏男孩℡: 我用IE浏览器又可以 Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING 坏男孩℡: nginx是应用程序吗 还是自带的 Eclipse Jetty Server 安全漏洞(CVE-2017-7658) Baby 看你们浪。: 但我没有父项目怎么办啊 Idea build : internal java compiler error 无心便安好: