标签: java-10

错误:java:java.lang.ExceptionInInitializerError IntelliJ

Heyo!

尝试使用JDK 10.0.1和"spring-boot-starter-test"启动Intellij(终极版)时,我遇到了一些麻烦.如果我运行main方法,无论其内容如何,​​无论我是否有任何活动测试,我总是在编译之后收到"Error:java:java.lang.ExceptionInInitializerError",之后运行.

总结一下,这会导致错误

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

现在我假设这与Spring引导测试与JDK 10不兼容有关,虽然我很容易问,任何想法如何解决这个问题?

更新2 要清楚,这是我从Intellij收到的唯一输出

Information:javac 10.0.1 was used to compile java sources
Information:2018-05-14 21:04 - Compilation completed with 1 error and 0 warnings in 2 s 381 ms
Error:java: java.lang.ExceptionInInitializerError
Run Code Online (Sandbox Code Playgroud)

这里构建,版本和依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>10</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional> …
Run Code Online (Sandbox Code Playgroud)

spring-test maven-3 spring-boot java-10

11
推荐指数
2
解决办法
9223
查看次数

Optional.get()Vs重载了Java-10中的Optional.orElseThrow()

一个人如何避免明确地Exception试图从一个Optional或同时使用中获取价值Optional.get

目前,API可能会受到以下保护orElseThrow:

// exception could be replaced with any other
Integer opt = anyOddInStream.orElseThrow(
                           () -> new NoSuchElementException("No value present"));
Run Code Online (Sandbox Code Playgroud)

然而,get当试图访问类似的东西时,直接实现令人失望(当一个人可能不愿意显式抛出异常时)

// the following not only just fails but throws an exception as well
Integer previous = anyOddInStream.get();
Run Code Online (Sandbox Code Playgroud)

如果一个人想要确保其中Optional一个有值,如果没有,他们不想继续null向前传播怎么办?

java optional java-10

10
推荐指数
2
解决办法
1287
查看次数

对话框(JavaFX 10)的一部分时,Indeterminate ProgressBar不会设置动画

当a ProgressBar是不确定的时,它有一个来回的动画.这ProgressBar是正常的Stage一部分时工作正常但是当部分时不起作用Dialog.相反,它似乎只是坐在动画的开头.该ProgressBar确实,但是,适当的时候设置为某个确定的值更新.注意:该问题未出现在Java 8中.

没有任何例外情况的迹象.

这是一个MCVE(它的GIF):

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button detButton = new Button("Launch Determinate Task");
        detButton.setOnAction(ae -> {
            ae.consume();
            createDialog(primaryStage, true)
                    .showAndWait();
        });

        Button indetButton = new Button("Launch …
Run Code Online (Sandbox Code Playgroud)

java javafx java-10

10
推荐指数
1
解决办法
451
查看次数

带有差异的JVM 10规范?

有没有人知道是否有一个版本的Java 10和JVM 10规范与前一版本的差异可用?对于Java 8和Java 9,存在diff的规范,否则很难看到究竟发生了什么变化.

java jvm specifications java-10

9
推荐指数
1
解决办法
361
查看次数

在JDK 10中为类文件生成JNI头文件

Java Native Interface(JNI)的一个组成部分是通过C头桥接JVM代码和本机代码.生成这些头文件的方法过去非常简单:只需javah在类文件上调用命令行实用程序即可.然后,此过程将为使用native修饰符标记的任何方法生成原型.

但是,从Java 10开始,该javah实用程序已被删除,其建议的替换是javac的新标志"-h".如果有可用的Java源文件,则替换可以正常工作,但是只有编译的类文件可用时才会出现问题.(引发这个问题的问题是我正在尝试从Scala源生成JNI绑定.我当前的方法是首先编译它们然后在生成的类文件上运行javah.)

在只有编译的类文件可用的情况下,有没有办法生成C头文件,类似于以往的方式javah

java java-native-interface javah java-10

9
推荐指数
2
解决办法
3667
查看次数

32位系统上的Java 10(及以下版本)

据我所知,没有任何计划从oracle运送java for 32 Bit - 但也许我误解了这种情况.如果我是对的 - 如果我们需要支持32位库(dll),我们都会怎么做?什么是32位操作系统?目前这似乎是对未来的巨大影响,但正如我所说 - 也许我错了.事实是我们无法下载32位的Java 10运行时,因为只有64位下载链接.

java x86 java-10

9
推荐指数
2
解决办法
1万
查看次数

NoSuchMethodError:com.sun.glass.ui.win.WinApplication.staticScreen_getScreens中的<init>

自从升级到install4j 7.0.5和Java 10以来,在Windows上运行我们的应用程序的用户越来越频繁地报告应用程序抛出

java.lang.NoSuchMethodError: <init>
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
    at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Unknown Source)
    at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Unknown Source)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
    at java.base/java.lang.Thread.run(Unknown Source)


UiLauncher (WAITING)
    at java.base@10.0.1/jdk.internal.misc.Unsafe.park(Native Method)
    at java.base@10.0.1/java.util.concurrent.locks.LockSupport.park(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.CountDownLatch.await(Unknown Source)
    at platform/javafx.graphics@10.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown Source)
    at platform/javafx.graphics@10.0.1/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
    at platform/javafx.graphics@10.0.1/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
    at platform/javafx.swing@10.0.1/javafx.embed.swing.JFXPanel.initFx(Unknown Source)
    at platform/javafx.swing@10.0.1/javafx.embed.swing.JFXPanel.<init>(Unknown Source)
    at java.base@10.0.1/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base@10.0.1/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base@10.0.1/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base@10.0.1/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.base@10.0.1/java.lang.Class.newInstance(Unknown Source)
    at app//...
Run Code Online (Sandbox Code Playgroud)

通过install4j创建exe文件启动应用程序时.通过反射创建javafx.embed.swing.JFXPanel实例来触发错误:

Class.forName("javafx.embed.swing.JFXPanel").newInstance();
Run Code Online (Sandbox Code Playgroud)

我们目前怀疑由于某种原因加载了不兼容的DLL(glass.dll似乎包含stacktrace中提到的本机方法).

有谁知道如何防止这个错误?例如,是否有办法将通过install4j生成的exe执行应用程序时使用的java.library.path限制为嵌入在安装程序中并随应用程序本地安装的Java运行时环境?根据一个用户,如果使用"手动"启动应用程序,则不会发生错误

java …
Run Code Online (Sandbox Code Playgroud)

java windows javafx install4j java-10

9
推荐指数
1
解决办法
995
查看次数

使用Java 9 JDK定位Java 6会发出警告

我正在尝试使用JDK 9构建项目,因为使用--releasejavac 的参数意味着它可以为旧版本构建而无需安装相应的JDK/JRE.我需要支持Java 6,因此我先前存在的设置需要Java 6用于bootstrapClasspath,而另一个JDK 8或9用于gradle和IDE.我想取消JDK 6而仅使用9,并稍微整理一下构建.

我的新build.gradle具有以下配置:

tasks.withType(JavaCompile) {
    options.compilerArgs.addAll(['--release', '6', "-Xlint"])
}
Run Code Online (Sandbox Code Playgroud)

sourceCompatibility,targetCompatibilitybootstrapClasspath选项都没有设置,我的理解的--release说法,现在处理这个问题.

我收到以下警告:

warning: [options] source value 1.6 is obsolete and will be removed in a future release
warning: [options] target value 1.6 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
Run Code Online (Sandbox Code Playgroud)

我知道这些可以被抑制(它说就在那里),但我没想到会看到它们.当使用--release [7-9]这些警告构建时不存在.

对于上下文,这是旧的(现在未使用)'2x JDK'配置:

sourceCompatibility = "1.6"
targetCompatibility = "1.6"

tasks.withType(JavaCompile) { …
Run Code Online (Sandbox Code Playgroud)

java release-management gradle java-9 java-10

8
推荐指数
1
解决办法
212
查看次数

如何处理 Java 11 中缺少的 Swing PLAF 类?

出于某种原因,我们使用com.sun.java.swing.plaf.windows.WindowsComboBoxUI在 Java 5.0 到 Java 8.0 的 Windows/Linux/Mac OS 平台上工作的类

从 Java 10 和 Java 11 开始(我们将坚持它作为 LTS)这个类对类加载器不可见:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsComboBoxUI
at xxx.YYY.main(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.java.swing.plaf.windows.WindowsComboBoxUI
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more
Run Code Online (Sandbox Code Playgroud)

我们怎样才能让它工作?

java swing look-and-feel java-10 java-11

8
推荐指数
1
解决办法
5104
查看次数

Lambda 字段捕获局部变量 .isSynthetic() 返回 false

在回答这个关于捕获局部变量的 lambda 的问题时,我定义了一个简单的 lambda 来捕获一个局部变量,并表明 lambda 有一个包含该变量值的字段。根据各种来源(例如此处此处),当 lambda 捕获局部变量时,其值存储在“合成”字段中。Java 虚拟机规范(第4.7.8 节)似乎暗示了这一点,其中说:

未出现在源代码中的类成员必须使用 Synthetic 属性进行标记,否则必须设置其 ACC_SYNTHETIC 标志。此要求的唯一例外是编译器生成的方法,它们不被视为实现工件,即表示 Java 编程语言的默认构造函数的实例初始化方法(第 2.9.1 节)、类或接口初始化方法(第 2.9.2 节) ),以及 Enum.values() 和 Enum.valueOf() 方法。

lambda 的字段不是定义的异常之一,并且 lambda 的字段未在源代码中声明,因此根据我的理解,该字段应该是根据此规则合成的。

通过反射可以很容易地证明场的存在。但是,当我使用该Field.isSynthetic方法进行检查时,它实际上返回false. 这种方法的文档说:

如果此字段是合成字段,则返回 true;否则返回 false。

我正在 Java 10.0.1 中使用 JShell 进行测试:

> class A { static Runnable a(int x) { return () -> System.out.println(x); } }
|  created class A

> Runnable r …
Run Code Online (Sandbox Code Playgroud)

java lambda closures language-lawyer java-10

8
推荐指数
1
解决办法
229
查看次数