- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 GraalVM 执行 JavaScript 文件,但在异常处理方面遇到问题。我的 JS 代码会回调 Java,如果这些 Java 方法之一抛出异常,那么我就会丢失原因链。
public class Example {
public static void doSomething() {
throw new RuntimeException("Example", new RuntimeException("Some nested exception"));
}
}
// --------------
var Example = Java.type("ex.Example");
function f() {
Example.doSomething();
}
// -------------
String src = ...
Source s = Source.newBuilder("js", src, "example").build();
try {
context.eval(s);
} catch (PolyglotException e) {
e.printStackTrace(); // This only prints the PolyglotException with the message "Example"
}
发生这种情况的原因是因为 Graal/Truffle 创建了一个 HostException 实例,该实例有一个不调用 super(e) 的构造函数,它将其分配给一个用于获取消息的内部字段,而不是其他任何内容。这似乎是故意的,但我不明白原因。这是安全问题吗?你能想出一种方法来改变我的这种行为吗?我非常希望在我的日志中找到异常的完整原因,但目前它停在 HostException
处,它通常只显示类似“A
”的内容(例如,如果错误的原始原因是 NoSuchElementException("A")
)
final class HostException extends RuntimeException implements TruffleException {
private final Throwable original;
HostException(Throwable original) {
this.original = original;
}
Throwable getOriginal() {
return original;
}
@Override
public String getMessage() {
return getOriginal().getMessage();
}
@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
public Node getLocation() {
return null;
}
public boolean isCancelled() {
return getOriginal() instanceof InterruptedException;
}
}
最佳答案
我也遇到过同样的问题,结果发现,JS Error 具有以下功能:
printStackTrace: [Function],
fillInStackTrace: [Function],
getCause: [Function],
initCause: [Function],
toString: [Function],
getMessage: [Function],
getLocalizedMessage: [Function],
getStackTrace: [Function],
setStackTrace: [Function],
addSuppressed: [Function],
getSuppressed: [Function]
printStackTrace
,例如,打印 java 堆栈跟踪:
try {
Java.type('ClassWithException').throwRuntimeEx();
} catch (e) {
console.log(e.printStackTrace())
}
给出以下内容:
java.lang.RuntimeException: Example message
at ex.ClassWithException.throwRuntimeEx(ClassWithException.java:6)
at com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod$MHBase.invokeHandle(HostMethodDesc.java:269)
at com.oracle.truffle.polyglot.HostMethodDesc$SingleMethod$MHBase.invoke(HostMethodDesc.java:261)
at com.oracle.truffle.polyglot.HostExecuteNode$1.executeImpl(HostExecuteNode.java:776)
at com.oracle.truffle.polyglot.GuestToHostRootNode.execute(GuestToHostRootNode.java:87)
at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:328)
...
at com.oracle.truffle.polyglot.PolyglotValue$InteropValue.execute(PolyglotValue.java:2008)
at org.graalvm.polyglot.Value.execute(Value.java:338)
at com.oracle.truffle.trufflenode.GraalJSAccess.isolateEnterPolyglotEngine(GraalJSAccess.java:2629)
Caused by: java.lang.RuntimeException: Inner exception
... 245 more
关于java - GraalVM 中的异常链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55953882/
是否可以在 reflection-config.json 中添加一个包?像这样的东西: [ { "name" : "org.apache.tinkerpop.shaded.kryo.ser
GraalVM 有许多令人惊讶的功能。但是我还没有看到但很想看到的一件事是能够在浏览器中运行 GraalVM 应用程序。像这样的来源 (Top 10 Things To Do With GraalVM
在 GraalVM 架构上实现编程语言有哪些(架构)差异 - 特别是使用 Sulong 的 Graal、Truffle 和 LLVM 之间? 我计划在 GraalVM 架构上重新实现现有的静态类型编程
如何控制使用 GraalVM native-image 创建的原生图像的堆大小? native 图像是否评估通常的 JVM -Xmx 参数? 最佳答案 您可以使用 -Xmx{n} 命令行参数指定堆大小
GitHub 上的 Substrate VM 文档(例如 CONFIGURE.md 提到了多个 -H:... 选项,例如 -H:ReflectionConfigurationResources 或 -
是否有任何方法可以将 javascript 源代码转换为某种预编译的声明,可以以某种方式存储并加载到 org.graalvm.polyglot.Context 而不是将其作为原始字符串进行评估?类似于
我有一个小 Java 程序。我使用 Graal 的 native-image 构建了一个二进制文件(即 GraalVM AOT 又名 SubstrateVM)。 我的程序可以使用 Java 运行时或本
我正在尝试使用 GraalVM 和 native 图像构建 native 应用程序。开始构建过程时发生错误。类路径中似乎缺少 cl.exe。就像 GraalVM 网站上提到的那样,我已经安装了“GRM
我知道这些技术都是相关的,但有人可以解释一下每种技术的用途以及它们如何组合在一起吗? 最佳答案 简单化: 格拉尔 - Java 字节码编译器。可以及时(作为 JVM 的一部分)或提前使用。 Subst
我为使用动态编程找出最长公共(public)子序列的方法创建了一个基准: @Benchmark def longestCommonSubsequenceDP(): String = { v
我有一个在 java-8-openjdk-amd64 上运行的 java 应用程序,它评估 java 脚本。现在我安装了 GraalVM Community Edition graalvm-ce-19
我正在尝试编译示例 Quarkus使用 GraalVM 和 Maven 项目到 native 镜像。这是我的 Quarkus 服务的代码: package gk.testquarkus; import
我正在 Graal 上编写一个应用程序,它将能够执行不同语言的小脚本。 我正在尝试为我用来将 Context.eval() 调用(类型:Value)的结果转换/处理为 Java 对象的类编写一些单元测
我正在尝试使用 Graalvm 构建 native 图像,但每次我尝试使用 mvn gluonfx:build 构建它时都会出现错误,项目中有数据库连接,例如:H2 DB。 正常运行即可 没有任何数据
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 2 年前。
我正在尝试使用 Micronaut 应用程序作为发现的 Graalvm native 镜像 here. 但是当我运行 ./gradlew buildNativeLambda 时我有这些异常(excep
我正在使用 GraalVM 执行 JavaScript 文件,但在异常处理方面遇到问题。我的 JS 代码会回调 Java,如果这些 Java 方法之一抛出异常,那么我就会丢失原因链。 public c
我正在尝试在项目中使用 GraalVM 来添加简单的脚本功能。我使用 Maven 进行依赖项管理来加载 Graal 的基本依赖项。这是我的 pom.xml: 4.0.0 cx.matthe
嗨,我一直在尝试对我的 javafx 项目进行 native 构建,但当我尝试运行它时出现异常。我怀疑在编译的二进制文件中找不到 .fxml 文件 Exception in thread "main"
环顾四周,皆是对手! 云时代的掉队者,由于Java启动的高延时、对资源的高占用、导致在Serverless及FaaS架构下力不从心,在越来越流行的边缘计算、IoT方向上也是难觅踪影;
我是一名优秀的程序员,十分优秀!