相关疑难解决方法(0)

debug jdk source无法监视变量是什么

我正在调试JDK源代码:

 public static int codePointAt(CharSequence seq, int index) {
        char c1 = seq.charAt(index++);
        if (isHighSurrogate(c1)) {
            if (index < seq.length()) {
                char c2 = seq.charAt(index);
                if (isLowSurrogate(c2)) {
                    return toCodePoint(c1, c2);
                }
            }
        }
        return c1;
    }
Run Code Online (Sandbox Code Playgroud)

我想c1在进入之前看到变量if (isHighSurrogate(c1)).但是,当我调试监视c1变量时,它会显示:

在此输入图像描述

我真的尝试过添加rt.jar源代码,它确实可以进入JDK源代码的断点,如: 在此输入图像描述

但为什么c1变量无法显示?

java

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

触发事件时自发的NullPointerExceptions

我目前正在与LWJGL库结合使用JavaFX Level Editor,以实现OpenGL功能,从而使用多线程.

然而,我的问题是,有时当我触发JavaFX事件时(当我按下按钮/键等时),我得到了这种自发性java.lang.NullPointerException.我似乎无法弄清楚何时发生错误的模式,并且由于一些奇怪的原因,堆栈跟踪不会向我提供异常发生的位置.我所知道的是,当我以某种方式与JavaFX应用程序线程交互时,就会发生这种情况.

但是当它确实发生时,它不仅会将其打印到控制台一次然后崩溃.发生的情况是应用程序不断地反复打印出错误消息,直到我强行关闭应用程序.发生错误时,我似乎无法再触发某些特定事件.

这是我得到的自发重复错误消息:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Unknown Source)
at javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Unknown Source)
at com.sun.javafx.tk.Toolkit$$Lambda$153/452428720.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Unknown Source)
at com.sun.javafx.tk.Toolkit.firePulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$42/424424770.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda$38/12064136.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我猜这与"同步节点"有关.由于我正在使用多线程来运行OpenGL渲染循环,这可能与案例有关.我也在使用Java8中的Lambda Expression,显然正如它在错误日志中所说的那样,它也与它们有关.

我不希望有人给我一个确切的答案,我的问题是什么,以及我做错了什么,因为我没有提供任何代码(因为我的项目太大而且我不知道Exception发生在哪里).但是,我有一些通用的问题:

  1. 这个错误日志是什么意思?

  2. 什么可能导致这个?

  3. 为什么它没有向我提供有关异常发生地点的任何信息?

我设法通过将Eclipse中的JRE从JRE安装切换到JDK提供的jar来从堆栈跟踪中获取行号.这允许我从编译的API中获取行号,例如JavaFX本身.

这是新的错误日志:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2289) …
Run Code Online (Sandbox Code Playgroud)

java lambda multithreading javafx exception

15
推荐指数
1
解决办法
2457
查看次数

为什么在eclipse中调试jdk库,我看不到局部变量值?

问题是在调试java库类时,例如HashSet函数,我看不到局部变量.在variables选项卡上我只能看到函数参数和这个字段.当我试图添加局部变量时watch,eclipse说:"评估期间的错误".

所以我的问题是为什么会发生这种情况?我怎样才能看到那些局部变量值?

java eclipse debugging

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

如何使用Eclipse检查调试符号状态?

在讨论我问的另一个问题时,@ Aaron Digulla指出了以下问题:

如果安装了Java SDK,则Java安装的根目录中应该有一个"src.zip"文件.如果它丢失了,请再次下载Java.当您打开JTable类型时(或者当您单击堆栈跟踪中的行时),Eclipse应该自动找到源并显示给您.

该文件src.zip存在给我,但我仍然无法访问JTable类似@Aaron 的来源说.可能是什么问题呢?我怎样才能用Eclipse解决这个问题?

不过,"未知来源"让我很担心.这意味着您的Java版本没有调试符号.确保你a)在开发时使用SDK,b)你的SDK包含调试符号,c)不要告诉命令java在加载类时剥离调试符号.

a)我正在使用Eclipse,为什么我不应该使用SDK?

b)我如何知道我的SDK是否包含调试符号?如果没有,我该如何添加它们?

c)如何检查Eclipse是否告诉java剥离调试符号?

抱歉这些平庸的问题,但我觉得我不完全理解Java开发过程.

java eclipse sdk debug-symbols

7
推荐指数
1
解决办法
3845
查看次数