运行jjs或ScriptEngine#eval我的JavaScript(https://gist.github.com/also/005fd7c200b20f012e10)崩溃时出现此异常并且没有更多详细信息:
Exception in thread "main" java.lang.RuntimeException: Method code too large!
at jdk.internal.org.objectweb.asm.MethodWriter.getSize(MethodWriter.java:2065)
at jdk.internal.org.objectweb.asm.ClassWriter.toByteArray(ClassWriter.java:856)
at jdk.nashorn.internal.codegen.ClassEmitter.toByteArray(ClassEmitter.java:577)
at jdk.nashorn.internal.codegen.CompilationPhase$8.transform(CompilationPhase.java:396)
at jdk.nashorn.internal.codegen.CompilationPhase.apply(CompilationPhase.java:513)
at jdk.nashorn.internal.codegen.Compiler.compile(Compiler.java:361)
at jdk.nashorn.internal.runtime.Context.compile(Context.java:1071)
at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1019)
at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:490)
at jdk.nashorn.tools.Shell.runScripts(Shell.java:306)
at jdk.nashorn.tools.Shell.run(Shell.java:168)
at jdk.nashorn.tools.Shell.main(Shell.java:132)
at jdk.nashorn.tools.Shell.main(Shell.java:111)
Run Code Online (Sandbox Code Playgroud)
我怎样才能弄清楚导致方法代码太大的原因?我已经尝试了一些日志选项jjs(--log=codegen:info),但我没有看到任何指向罪魁祸首.
我已经使用Java版本1.9.0-ea-b34和1.8.0_20-b26进行了测试.
我试过两个destroy并destroyForcibly使用下面的代码 -
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("current process id:"+currentProcess.getPid());
currentProcess.destroyForcibly();
Run Code Online (Sandbox Code Playgroud)
但在两种情况下都获得例外
线程"main"中的异常java.lang.IllegalStateException:java.base/java.lang.ProcessHandleImpl.destroyForcibly中java.base/java.lang.ProcessHandleImpl.destroyProcess(ProcessHandleImpl.java:308)中不允许销毁当前进程( ProcessHandleImpl.java:331)在util.CurrentProcess.main(CurrentProcess.java:18)
Java 9允许我们private在接口中使用方法,这意味着不明确标记public方法不再是多余的.
但是,现在必须这样做吗?我希望规范仍然假定public abstract为保持与早期源代码向后兼容的方法的默认修饰符?
我正在阅读API文档,jdk.accessibility并注意到它分别列出了所有这些.
requires 在一个模块中具有范围的模块都是消耗模块的间接需求?
该module-info.java模块如下:
module jdk.accessibility {
requires transitive java.desktop;
exports com.sun.java.accessibility.util;
}
Run Code Online (Sandbox Code Playgroud)
并且java.desktop是一样的东西(试图包括不同-
module java.desktop {
...
requires java.prefs;
...
requires transitive java.xml;
exports java.applet;
...
exports sun.awt to
javafx.swing,
jdk.accessibility,
oracle.desktop;
opens javax.swing.plaf.basic to jdk.jconsole;
...
uses javax.sound.sampled.spi.MixerProvider;
...
provides javax.sound.sampled.spi.MixerProvider with
com.sun.media.sound.DirectAudioDeviceProvider,
com.sun.media.sound.PortMixerProvider;
Run Code Online (Sandbox Code Playgroud)
但是,之后的文档jdk.accessibility没有提到sun.awt要求或间接要求或间接出口.这里出现不一致的原因是什么?
寻找可以帮助理解(2)中发生的事情的这些差异的示例,以及作为我们使用Java9适应模块结构的实践应该遵循的内容.
我使用相同的命令来生成带有 jdk 1.8 和 1.9 的 javadoc,而在 jdk 1.8 中生成的 doc 带有错误和警告,但不是用 1.9 生成的。
以下是我正在使用的命令:-
C:\Program Files\Java\jdk1.8.0_05\bin>javadoc -d D:\APIdoc -sourcepath D:\MyFile\src\main\java -subpackages com.abc.dap.pqr
Output:
100 errors
100 warnings
Doc generated successfully
C:\Program Files\Java\jdk-9\bin>javadoc -d D:\APIdoc1 -sourcepath D:\MyFile\src\main\java -subpackages com.abc.dap.pqr
Output:
100 errors
Doc not generated
Below are the errors:-
error: package [package_name] does not exist
error: cannot find symbol
Run Code Online (Sandbox Code Playgroud)
在 jdk1.8 和 1.9 中观察到相同的错误,但我无法理解为什么 1.9 没有生成 doc。请建议使用 jdk1.9 生成 javadoc 的解决方法
我知道Java 9 提供的HTTP/2 客户端,并在尝试使用以下代码的孵化器模块时:
// Request builder
URI uri = new URI("http://www.stackoverflow.com/"); // using www.google.com gives me some payload with no exception
HttpRequest request = HttpRequest.newBuilder().uri(uri).GET().build();
// Client
HttpClient httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build();
System.out.println(httpClient.version());
// Response builder
HttpResponse response = httpClient.send(request, HttpResponse.BodyHandler.asString());
System.out.println("statusCode = " + response.statusCode()); // 200 for google.com
Run Code Online (Sandbox Code Playgroud)
我收到了这个作为输出:
Run Code Online (Sandbox Code Playgroud)Exception in thread "main" java.io.IOException: /192.168.0.2:60726: GOAWAY received at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.handleGoAway(Http2Connection.java:613) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.handleConnectionFrame(Http2Connection.java:531) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.processFrame(Http2Connection.java:466) at jdk.incubator.httpclient/jdk.incubator.http.internal.frame.FramesDecoder.decode(FramesDecoder.java:114) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:152) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.asyncReceive(Http2Connection.java:425) at jdk.incubator.httpclient/jdk.incubator.http.AsyncSSLDelegate.upperRead(AsyncSSLDelegate.java:557) at jdk.incubator.httpclient/jdk.incubator.http.internal.common.Queue.put(Queue.java:73) at …
我在解决Euler项目的问题205时发现了这一点.问题如下:
彼得有九个四面(金字塔)骰子,每个骰子都有编号为1,2,3,4的面孔.科林有六个六面(立方体)骰子,每个骰子都有编号为1,2,3,4,5,6的面孔.
彼得和科林掷骰子并比较总数:总得分最高.如果总数相等,结果是平局.
金字塔皮特击败立方科林的可能性是多少?将您的答案四舍五入到0.abcdefg形式的七位小数
我用Guava写了一个天真的解决方案:
import com.google.common.collect.Sets;
import com.google.common.collect.ImmutableSet;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
public class Problem205 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
List<Integer> peter = Sets.cartesianProduct(Collections.nCopies(9, ImmutableSet.of(1, 2, 3, 4)))
.stream()
.map(l -> l
.stream()
.mapToInt(Integer::intValue)
.sum())
.collect(Collectors.toList());
List<Integer> colin = Sets.cartesianProduct(Collections.nCopies(6, ImmutableSet.of(1, 2, 3, 4, 5, 6)))
.stream()
.map(l -> l
.stream()
.mapToInt(Integer::intValue)
.sum())
.collect(Collectors.toList());
long startTime2 = System.currentTimeMillis();
// IMPORTANT BIT HERE! v
long solutions = …Run Code Online (Sandbox Code Playgroud) 我已经了解到,为了使用任何其他导出的模块,我们需要将该模块指定为requires:
module mymodule{
requires othermodule.xyz;
}
Run Code Online (Sandbox Code Playgroud)
当othermodule使用thirdmodule 和mymodule需要时, othermodule应该像这样定义传递依赖:
module othermodule {
requires transitive thirdmodule
}
Run Code Online (Sandbox Code Playgroud)
但是,我见过许多使用该public关键字的网站:
module othermodule {
requires public thirdmodule
}
Run Code Online (Sandbox Code Playgroud)
两种形式之间有什么区别; 即requires public和requires transitive?
为了能够将我的Eclipse插件"treezCore"也用作Java9模块,我在src文件夹中创建了一个module-info.java.
此外,我将Plug-in Dependencies从Classpath移动到Modulepath.我可以在插件依赖项中看到一个模块"org.eclipse.swt.3.106.1.v20170926":
但是,我无法在module-info.java中引用该模块.我试过了
require org.eclipse.swt.3.106.1.v20170926;
require org.eclipse.swt;
require swt;
Run Code Online (Sandbox Code Playgroud)
这些选项都没有奏效.Eclipse使用的jar文件\ plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar不包含模块定义,
jar --file org.eclipse.swt_3.106.1.v20170926-0519.jar -d
说无法导出模块描述符.另见
如果我从中下载更新版本的swt.jar
我得到以下有希望的输出:
swt automatic
requires java.base mandated
contains org.eclipse.swt
contains org.eclipse.swt.accessibility
contains org.eclipse.swt.awt
contains org.eclipse.swt.browser
contains org.eclipse.swt.custom
contains org.eclipse.swt.dnd
contains org.eclipse.swt.events
contains org.eclipse.swt.graphics
contains org.eclipse.swt.internal
contains org.eclipse.swt.internal.gdip
contains org.eclipse.swt.internal.image
contains org.eclipse.swt.internal.mozilla
contains org.eclipse.swt.internal.mozilla.init
contains org.eclipse.swt.internal.ole.win32
contains org.eclipse.swt.internal.opengl.win32
contains org.eclipse.swt.internal.webkit
contains org.eclipse.swt.internal.win32
contains org.eclipse.swt.layout
contains org.eclipse.swt.ole.win32
contains org.eclipse.swt.opengl
contains org.eclipse.swt.printing
contains org.eclipse.swt.program
contains org.eclipse.swt.widgets
Run Code Online (Sandbox Code Playgroud)
我也依赖于org.eclipse.jface而无法找到它的单独下载.
=>我真的必须等待使用包含模块定义的新插件版本的Eclipse新版本吗?
或者我可以以某种方式从插件文件夹中引用旧版本的swt,即使它不包含模块定义?我寻找一种简单的方法来定义别名或后备依赖,例如
requires ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar as 'org.eclipse.swt' …Run Code Online (Sandbox Code Playgroud) swt eclipse-plugin eclipse-rcp java-platform-module-system java-9
实际上我正在使用Kotlin开发Spring Boot v2应用程序.我在版本9中使用JDK.
添加依赖项后,spring-boot-starter-data-jpa我得到ClassNotFound错误:
引起:org.springframework.beans.factory.BeanCreationException:在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]中定义名称为'entityManagerFactory'的bean创建错误:init方法的调用失败; 嵌套异常是java.lang.NoClassDefFoundError:javax/transaction/SystemException
我找到了一些针对该问题的文章,并在/ src/main/kotlin下添加module-info.java了以下内容:
module de.sample.backend {
// requires java.xml.bind;
requires javax.transaction.api;
// requires validation.api;
requires hibernate.jpa;
// requires hibernate.validator;
requires spring.beans;
requires spring.core;
requires spring.context;
requires spring.tx;
requires spring.web;
requires spring.webmvc;
requires spring.data.commons;
requires spring.data.jpa;
requires spring.boot;
requires spring.boot.autoconfigure;
// requires cache.api;
}
Run Code Online (Sandbox Code Playgroud)
但后来我会得到一个 Caused by: java.lang.ArrayIndexOutOfBoundsException: 32800
[错误]无法执行目标org.apache.maven.plugins:maven-compiler-plugin:3.7.0:在项目naehmeisterei-services上编译(default-compile):执行default-compile of goal org.apache.maven.plugins :maven-compiler-plugin:3.7.0:编译失败:32800 - > [帮助1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.apache.maven.plugins:maven-compiler-plugin:3.7 .0:项目编译(default-compile)naehmeisterei-services:执行default-compile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:编译失败:32800 at org.apache.maven. org.apache.maven.life.internal.MojoExecutor.execute中的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)中的lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213) MojoExecutor.java:146)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProj ect(LifecycleModuleBuilder.java:81)org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter. java:128)org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)atg.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)org.apache.maven.DefaultMaven.execute(DefaultMaven) .java:107)org.apache.maven.cli.MavenCli.execute(MavenCli.java:955)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:290)org.apache.maven. cli.MavenCli.main(MavenCli.java:194)位于jdk.internal.refut的内部jdk.internal.refut.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)的jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)中.在org.codehaus.plexus.classworlds.launcher.Launcher.la的java.lang.reflect.Method.invoke(Method.java:564)中委托MethodAethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)unchEnhanced(Launcher.java:289)org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)引起:org.apache.maven.plugin.PluginExecutionException:执行default-compile …
java-9 ×10
java ×5
java-8 ×3
eclipse-rcp ×1
hibernate ×1
http ×1
http2 ×1
interface ×1
java-platform-module-system ×1
java-stream ×1
javadoc ×1
javascript ×1
kotlin ×1
maven ×1
nashorn ×1
performance ×1
spring-boot ×1
swt ×1