最近线上就发生此情况,莫名其妙出现
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
这里分情况:
-
当用户还没进行任何操作时,即S1、S2还没被使用,当然也不会触发类加载,此时如果删除jar包,会发现java进程依然存在,但是如果用户此时去操作,就会报错,因为S1和S2还没被加载到jvm中,就被用户删了。
-
如果用户已经操作了第一步和第二步,再删除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:
Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
坏男孩℡:
Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
坏男孩℡:
Eclipse Jetty Server 安全漏洞(CVE-2017-7658)
Baby 看你们浪。:
Idea build : internal java compiler error
无心便安好: