无法使用JDK 11运行Apache Netbeans 11

3
无论我做了什么,Netbeans 11 都无法与 JDK 11 正常工作。你能帮我解决吗?请注意,这个问题在 JDK 8 中不会出现。 我已经将 JDK 11 下载并安装到 C:\ Program Files \ Java \ jdk-11.0.4 中,并将 Netbeans 11 下载并解压缩到 C:\ Program Files \ netbeans 中。etc / netbeans.conf 文件已被编辑以设置 JDK 主目录: "netbeans_jdkhome =“C:\ Program Files \ Java \ jdk-11.0.4”" 尝试运行 bin / netbeans64.exe 时: 第一次:加载窗口出现,加载了一会儿,然后整个程序消失。 第二次:加载窗口没有出现。出现了一个空的Java应用程序。 如果我去任务管理器手动结束Netbeans进程,我就可以回到第一次。 请查看我在此处创建的问题的附件:https://issues.apache.org/jira/browse/NETBEANS-2865 从PowerShell执行netbeans64.exe会将错误消息输出到控制台。它们可以在consoleOutput.txt附件中找到。 执行bin / netbeans64.exe --trace C:\ netbeans.log的结果可以在netbeans.log附件中找到。 供参考,这是我遵循的教程: https://www.youtube.com/watch?v=cxh-hVty09g 更新和解决方案: 最终,我终于让它工作了,感谢skomisa提供的答案。 问题是由于Netbeans 11.0从以前的版本中导入设置引起的。第一次运行Netbeans 11.0时出现了一个弹出窗口,询问是否要从先前的版本中导入我的设置。关于原因,请参见skomisa的答案。 为了解决它,我通过删除AppData中的整个文件夹来删除NetBeans 11的所有首选项文件。 “C:\ Users \ Hunter \ AppData \ Roaming \ NetBeans \ 11.0 \” Skomisa的答案提到尝试创建NetBeans 11的新未压缩版本,并且不导入设置。我之前确实尝试过这样做,但从未收到要求导入的弹出窗口。我认为这是因为这个版本的NetBeans的用户首选项文件已经被创建并仍然存在于AppData中。 这给您留下了两个可行的选择:
  1. 删除NetBeans 11.0的所有用户偏好设置文件。
  2. 在整个文件夹中搜索\u0000的实例并将其移除。

看起来直接删除整个文件夹并从头开始似乎更容易且更令人满意。这样,我的所有用户偏好设置文件都将使用JDK和Netbeans接受的最新实践,并且希望没有任何滞留的旧代码会在下次更新时随机出错。

感谢大家的帮助!


@Villat 我已经在问题描述中添加了截图。 - Hunter S
@HunterS 请从PATH中删除第一行,即c:\Program Files (x86)\Common Files\Oracle\Java\javapath。 - Villat
嗯,在日志中有一个清晰的异常与偏好设置API相关,但很难说这是否是程序崩溃的原因。 - Michael Berry
1
@Villat 仍然没有运气。不过我很感激你的帮助。 - Hunter S
1
实际上,您的解决方案——删除所有用户首选项——是最干净的。而且您是正确的,一旦导入了您的设置,仅仅将NetBeans重新安装到不同的目录是无法解决问题的。 - skomisa
显示剩余12条评论
1个回答

3
您的问题似乎与您的错误报告的控制台日志输出中的IllegalArgumentException("Key contains code point U+0000")有关。看起来NetBeans正在尝试从早期版本的Netbeans导入您的首选项,并且在您的首选项文件中找到了一些无效的空字符。
这已经被报告过,但仍未解决。请参见Bug 271652 - IllegalArgumentException: Key contains code point U+0000
您的首选项文件都是XML文件(扩展名为xml),并位于C:\Users\user ID\AppData\Roaming\NetBeans\11.0\config的各个目录下。
在我的情况下,我的NetBeans 11的唯一首选项文件名为C:\Users\johndoe\AppData\Roaming\NetBeans\11.0\config\Editors\text\x-java\Preferences\org-netbeans-modules-editor-settings-CustomPreferences.xml,但您可能有多个。
从控制台日志中的堆栈跟踪来看,失败的调用是AbstractPreferences.getBoolean(),因此null可能在包含Boolean的行上。然而,正如这个相关的SO答案建议的那样,只需从所有首选项文件中删除所有null。任何XML文件中都不应该存在null。
解决问题的另一种方法是创建一个新的未压缩版本的NetBeans 11,但不导入您的设置。
我想您甚至可以找到现有(损坏的)NB 11安装中的首选项文件并将其删除,尽管即使它起作用,这似乎也是一种不令人满意的方法。
一些相关要点:
看到NetBeans窗口出现并很快消失通常是将netbeans_jdkhome设置为无效的JDK路径的症状,但在您的情况下,该值看起来很好。
NetBeans会忽略JAVA_HOME,因此它不可能是您问题的原因。有关NetBeans如何决定使用哪个JDK,请参见Bug 198950 - NetBeans应使用JAVA_HOME和JDK_HOME环境变量(如果可用)来确定要使用哪个JDK的响应。在启动NetBeans时指定--jdkhome参数将覆盖其他所有内容。 IllegalArgumentException只会在JDK版本>=9中出现,因为这是由于JDK bug修复所造成的,但这是一件好事。有关详细信息,请参见JDK-8075156: (prefs) get*()和remove()应禁止使用空控制字符“\u0000”作为键。您在NetBeans 8.x中没有遇到问题,因为您可能从未导入任何首选项文件,但即使您这样做了,由于JDK-8075156修复的Java错误,也不会发生IllegalArgumentException

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接