我正在尝试在我的Java应用程序中处理系统信号,以便USR1
和USR2
将在运行环境中触发特定的调试/诊断工作流。
使用以下主要应用程序:
package org.test.signals;
import sun.misc.Signal;
public class App {
public static void main(String[] args) {
Signal.handle(new Signal("USR1"), new MySignalHandler());
}
}
处理程序的位置
package org.test.signals;
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class MySignalHandler implements SignalHandler {
public void handle(Signal sig) {
System.out.println("Got: " + sig.getName());
}
}
在Eclipse中,我在 Signal 和 SignalHandler 上看到以下警告:
访问限制:类型'信号'不是API(对所需库的限制' C:\ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ rt.jar')
通过快速搜索I found that this fix seems to work,警告就会消失..
然而.. 这是一个maven托管项目;每次刷新/更新Maven项目时,我的.classpath
文件都会恢复为之前的配置,并返回警告。
我可以使用Eclipse向导使用全新的Maven Project重现这一点。
最小的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.test</groupId>
<name>signals2</name>
<version>0.0.1-SNAPSHOT</version>
<artifactId>signals2</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
</project>
我可以对 pom.xml 进行哪些更改来修复此问题,而不是更新Eclipse中的库?
上面链接中提到的方法中添加的 JRE系统库有什么不同,以及通过maven构建时使用的库?
答案 0 :(得分:0)
我只是在研究这个问题,并发现了这个错误实际意味着什么 - 以及它出现的原因。
使用Eclipse重新添加系统库后,警告消失,因为这增加了我的Eclipse工作区默认值,即JDK,而不是JRE。
就我而言,JDK中存在sun.misc.Signal
类,但JRE中不存在。