标题说明了一切。我无法在 Intellij Idea 中导入 java.awt.* 和 java.swing.* 。这是我的项目结构。
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
Run Code Online (Sandbox Code Playgroud) JDK9 最酷的功能之一是jlink,它制作了 JVM 的一个小型优化版本来运行应用程序,这对于在像 docker 这样的容器中运行应用程序非常有用。然而,仅仅传递您拥有的 JAR 文件并获得优化的运行时来运行它并不是很简单。
就像我使用 Gradle 并创建一个 fat jar 文件(所有依赖项都在一个 jar 文件中)一样,我只是想使用这个 jar 文件来为其生成 JVM?有什么解决办法吗?
我正在将 java 项目转换为使用模块。我的模块之一依赖于hamcrest库,它需要 jar 文件hamcrest.core和hamcrest.library. 这两个jar文件都有org.hamcrestpackage.json。因此,当我的模块想要将这两个 jar 视为自动模块时,它会失败,因为模块路径中的两个模块不能具有相同名称的包。我查了很多资料,在 stackoverflow 上找到了一些相关的东西。如果我不想重建这些依赖项,我似乎有两个合理的选择:
这是我的问题:
提前致谢
Set.of(E e)既然引入了不可变的实现Java 9,我们还需要使用吗Collections.singleton(E e)?后一种的用例是什么?
从两个实现的源代码来看,似乎并不明显。除了实现明确拒绝反序列化之外,我没有看到任何显着差异Set12。
我个人会选择Set.of(...)全新的代码,至少是因为时尚的观点(更短的代码,更少的导入)。但我可能错过了一些关键点吗?
我最近决定从我正在使用的 JDK 切换到更新版本。(特别是从jdk1.8.0_261到jdk-14.0.2)。这次升级非常顺利,因为大多数功能都按照我预期的方式工作,并且我能够找到如何调整以适应任何不一样的情况。
然而,如标题所示,我在编写使用 Swing 的特定应用程序时遇到了问题。我的主显示器是 4k 显示器,我已将该显示器的 Windows 系统缩放设置为 200%。虽然每个其他 Swing 应用程序都可以缩放以匹配 DPI 设置,但对于这个特定的应用程序,我想禁用该缩放并按 1:1 绘制像素,尤其是当此应用程序是分布式的时。
有没有办法通过 VM 参数禁用这种自动缩放?或者有没有办法在调用 Swing 库之前在运行时禁用缩放?(类似于必须在对库进行任何其他调用之前对外观进行任何更改。)
以供参考:
这是我用来创建 JFrame 并创建我在其上绘制所有内容的图形对象的代码,这发生在此类和本问题范围之外的定时循环中。
public class ScreenManager {
private GraphicsDevice device;
private final JFrame frame;
private static ScreenManager instance;
public ScreenManager() {
instance = this;
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
this.device = env.getDefaultScreenDevice();
this.frame = new JFrame(game.getGame().gameName());
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.frame.setUndecorated(true);
this.frame.setIgnoreRepaint(true);
this.frame.setResizable(false);
this.device.setFullScreenWindow(frame);
this.device.setDisplayMode(device.getDisplayMode());
this.frame.createBufferStrategy(2);
}
public Graphics2D getRenderGraphics() {
Window window = device.getFullScreenWindow();
if (window …Run Code Online (Sandbox Code Playgroud) 我意识到这还不是100%相关,但我对此非常好奇.在JDK8中,不推荐使用javac参数"source"和"target",并且将在JDK9中删除它们.作为一名JavaME开发人员,我想知道如何能够以旧平台为目标.例如,我在开发Blu-ray时使用的是目标1.3.如果没有"目标"选项,如何在JDK9退出时编译我的Xlet for Blu-ray?我想也必须有其他人(虽然我们可以同意不多)人们仍然需要针对旧设备.当JDK9出局时我们该怎么办?
编辑:甚至可以用JDK9定位1.3?
例如,我有somefile-0.1.jarjar文件,其中包含JPMS模块.此外,我参考Module somemodule了这个模块.
如何通过Module获取jar文件名(使用somemodule参考)?我已经检查过Module API但没有找到办法.
Java9 .or为Optional 添加了方法.现有的不同之处是.orElseGet什么?
checkUserInMemory(userId).or(() -> checkUserInDB(userId));
Run Code Online (Sandbox Code Playgroud) 我试图解决这个问题几个小时,我需要帮助:
它不是未知的问题,javax不是java 9的一部分,我无法弄清楚如何在没有以下exeption的情况下运行它:
Exception in thread "main" org.hibernate.internal.util.config.ConfigurationException: Unable to perform unmarshalling at line number 0 and column 0 in FILE C:\Users\Miles\Workspace\Projekte\SpringProjekte\RestForFun\resources\hibernate.cfg.xml. Message: null
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:133)
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:65)
at org.hibernate.boot.cfgxml.internal.ConfigLoader.loadConfigXmlFile(ConfigLoader.java:76)
at org.hibernate.boot.registry.StandardServiceRegistryBuilder.configure(StandardServiceRegistryBuilder.java:167)
at org.hibernate.cfg.Configuration.configure(Configuration.java:300)
at noobz.teamz.RestForFun.RestForFunApplication.main(RestForFunApplication.java:31)
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
- with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:122)
... 5 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) …Run Code Online (Sandbox Code Playgroud) 我收到以下错误,同时运行的混淆[proguard的]警告:类[META-INF /版本/ 9 /组织/阿帕奇/日志/ log4j的/ UTIL/ProcessIdUtil.class]意外包含类[org.apache.logging.log4j. util.ProcessIdUtil]
它看起来像proguard内省到META-INF文件夹并尝试处理在该目录中找到的类
虽然我添加了行-libraryjars log4j-api-2.10.0.jar(适用于所有log4j jar)但是会发生这种情况
这发生在proguard版本6.0.2中