我使用方法defineClass()从ClassLoader字节数组中定义一个类。我使用反射获取此方法:
ClassLoader.class.getDeclaredMethod(
"defineClass", String.class, byte[].class, int.class, int.class);
Run Code Online (Sandbox Code Playgroud)
Java10 抱怨defineClass.
我应该用什么代替?
我正在使用 OkHttp,我需要忽略应用程序调试的 SSL 错误。这曾经在 Java 8 中工作。
final TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
} catch (Exception s) {
s.printStackTrace();
}
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
//
//.sslSocketFactory(sslSocketFactory) throws error.
client …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的 JavaFX Gradle 项目更新到 Java 10。我已经像本指南中一样更改了我的 build.gradle 文件。但是当我尝试运行项目(执行./gradle run)时,我收到此错误:
> Task :run FAILED
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x5ce4f9a4) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics …Run Code Online (Sandbox Code Playgroud) OpenJDK 发布了局部变量类型推断的风格指南。
我一直在寻找一种内置的检查样式来解决这个问题,但没有找到。
我想要得到的东西非常简单,但我不太熟悉编写自定义模块。
var something = new Anything(); // OK
Run Code Online (Sandbox Code Playgroud)
var something = "literal"; // OK
Run Code Online (Sandbox Code Playgroud)
var something = anything.doAnything(); // Violation
Run Code Online (Sandbox Code Playgroud)
Anything<Foo<Bar>> something = new Anything<>(); // Violation
Run Code Online (Sandbox Code Playgroud)
String something = "literal"; // Violation
Run Code Online (Sandbox Code Playgroud)
是否有任何现有规则可以扩展/调整以获得上述内容?我应该尝试编写自己的规则吗?我认为 RegExp 可以处理某些情况,但不是全部。
我和一些朋友一起使用jdk 10应用程序,它使用jigsk功能集(在jdk9中引入)和junit5和maven作为构建管理.
但总是如果我们尝试使用Maven运行测试,我们会得到一个InaccessibleObjectException异常,例如:
[ERROR] resourceSchedule Time elapsed: 0.001 s <<< ERROR!
java.lang.reflect.InaccessibleObjectException: Unable to make de.truncated.framework.shared.resources.ResourceManagerTest() accessible: module de.truncated.framework.shared does not "opens de.truncated.framework.shared.resources" to unnamed module @ed7f8b4
Run Code Online (Sandbox Code Playgroud)
我现在谷歌搜索...在jdk9它可以简单地使用--permit-illegal-access,但这在jdk10中是不可能的,因为这个标志被删除了.来自junit5的jdk10代码示例和github上的其他代码不会使用拼图看起来如何.
所以看起来我错过了maven,module或jvm args config中的一些主要内容.如果有人可以就此事提供帮助,那将是非常好的.
非常感谢你!
项目的一些额外信息可能会有所帮助:
二手版本:
<properties>
<java.version>10</java.version>
<maven.compiler.version>3.7.0</maven.compiler.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<surefire.version>2.21.0</surefire.version>
<asm.version>6.1.1</asm.version>
<junit.jupiter.version>5.2.0</junit.jupiter.version>
<junit.platform.version>1.2.0</junit.platform.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
depencies:
<!--
junit 5 dependency
-->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>${junit.platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
构建插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version> …Run Code Online (Sandbox Code Playgroud) 我正在将应用程序迁移到Java 10.我们的应用程序通常使用JRE运行,但我们允许用户通过捆绑tools.jar和使用反射来JavacTool按需加载实例来编译自己的自定义代码.我们的方法如下:
public static JavaCompiler getJavaCompiler() {
String toolJarName = "tools.jar";
File file = getResourceForClass("tools.jar");
try {
file = file.getCanonicalFile();
} catch (IOException ignore) {
}
if (!file.exists())
throw new RuntimeException("Can't find java tools file: '"+file+"'");
try {
URL[] urls = new URL[]{ file.toURI().toURL() };
URLClassLoader cl = URLClassLoader.newInstance(urls);
return Class.forName("com.sun.tools.javac.api.JavacTool", false, cl).asSubclass(JavaCompiler.class).newInstance();
} catch (Exception e) {
throw new RuntimeException("Can't find java compiler from '"+file+"': "+e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为javax.tools.ToolProvider.getSystemJavaCompiler()从JRE运行时返回null.我们的方法在Java 8中运行良好,但tools.jar在Java 9中被删除了,我需要的类 …
我的程序之前工作得很好,并且我将场景构建器从JavaFx场景构建器2.0更改为胶子场景构建器10以添加一些CSS样式.我添加了样式,程序显示错误,例如 警告:使用版本10.0.1的JavaFX运行版加载版本10.0.1的JavaFX API的FXML文档 然后我将我的JDK更新到版本10.0.2但它显示了这样的错误.
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.NoClassDefFoundError: com/sun/javafx/css/parser/CSSParser
at de.jensd.fx.glyphs.GlyphIcon.<clinit>(GlyphIcon.java:48)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
at java.base/java.lang.Class.newInstance(Class.java:560)
at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.constructValue(FXMLLoader.java:1019)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754)
at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3253)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3210)
at …Run Code Online (Sandbox Code Playgroud) 最近,我将我的项目从Java 8升级到Java 10,并发出了很多警告,指出现在不推荐使用Observer和Observable。替换它们的建议是Flow API-问题是我尚未找到有关如何为Flow API编写代码的不错的教程。我发现的所有内容都说不能直接实现发布者/订阅者,而且我发现的许多内容都表明Flow API很大程度上基于多线程。
注意:我已经在StackOverflow以及Quora和其他一些站点上找到了这个答案,有人引用不能对Observable对象进行序列化,这在我为我的每个bean和许多bean实现Serializable时都完全不正确。我的其他类也是如此,甚至已经序列化以归档我的一些对象,并将它们从文件中读回到对象形式。
但是,多线程是一个问题-我不希望在响应模型对象的更改时使用流或多线程。问题1是-是否绝对需要使用Flow API,还是存在另一组不需要多线程和流的类/接口?
在查看Flow.publisher的javadocs时,我将用Observable替换-因为这是一个接口,这意味着我想我必须放入(类似于ListModel和TableModel类的实现)订阅者集合(类似于Observers?),并放置自定义代码以将其添加到我的发布商中或从中删除?问题2-我有权利吗?
问题3.)Flow.Publisher和Flow.Subscriber中的通用类型参数是什么?它显示了一个类型,但是我不知道在哪里使用该类型-我将在这里为我的一个模型类放置代码:
package net.draconia.frenchstudy.model;
import java.io.Serializable;
import java.util.concurrent.Flow.Publisher;
import java.util.concurrent.Flow.Subscriber;
public class Category implements Publisher<Category>, Serializable
{
private static final long serialVersionUID = 5281400324476454101L;
public static final Category EMPTY_CATEGORY = new Category();
private Integer miId;
private String msCategory;
public Category()
{ }
public Category(final int iId)
{
setId(iId);
}
public Category(final String sCategory)
{
setCategory(sCategory);
}
public Category(final int iId, final String sCategory)
{
setId(iId);
setCategory(sCategory);
}
public String getCategory()
{ …Run Code Online (Sandbox Code Playgroud) 我是否需要main在模块内或外部运行我的方法?
我是使用Java模块化系统的新手.我正在尝试使用Java 10中的JavaFX创建一个简单的程序,因为它是支持JavaFX的Java的最后一个版本.
我在module-info.javaJavaFX 上导入了必要的依赖项,它只显示了一个简单的窗口.
sample.fxml 码:
<?import javafx.scene.layout.GridPane?>
<GridPane fx:controller="com.gui.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>
Run Code Online (Sandbox Code Playgroud)
当我构建我的代码时,它说:
Warning:(4, 27) java: module not found: com.main
Run Code Online (Sandbox Code Playgroud)
当我尝试运行我的代码时,我得到:
Exception in Application constructor Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Run Code Online (Sandbox Code Playgroud)
任何人都可以为此提供建议,或者以某种方式提供有关使用模块化系统创建项目的实际应用建议.
我在下面附上了一对截图.
建立警告:
运行时失败:
我有一个简单的对象:
@Value
@Builder
public class User implements Serializable {
private final String userId;
private final String email;
private final String name;
}
Run Code Online (Sandbox Code Playgroud)
这里没有魔法,除了我Lombok 1.18.2在这里使用@Value和@Builder注释的事实.所有这些都适用于Java 10和Gradle 4.10.现在我升级到Java 11和Gradle 5.2,然后突然得到:
> Task :application:compileJava
/src/application/src/main/java/com/rbb/tutor/user/model/User.java:12: error: variable userId not initialized in the default constructor
private final String userId;
^
/src/application/src/main/java/com/rbb/tutor/user/model/User.java:13: error: variable email not initialized in the default constructor
private final String email;
^
/src/application/src/main/java/com/rbb/tutor/user/model/User.java:14: error: variable name not initialized in the default constructor
private final String …Run Code Online (Sandbox Code Playgroud) java-10 ×10
java ×9
javafx ×3
gradle ×2
java-9 ×2
java-platform-module-system ×2
checkstyle ×1
java-11 ×1
java-module ×1
jmod ×1
junit5 ×1
lombok ×1
maven-3 ×1
module ×1
observable ×1
okhttp3 ×1
reflection ×1
scenebuilder ×1
ssl ×1