我有一个Java 9应用程序,我正在尝试为Windows应用商店打包.奇怪的是,当我直接运行exe-launcher时,它按预期工作,但是当我通过APPX包运行启动器时,我得到以下奇怪的错误:
Exception in thread "Swing-Shell" java.lang.InternalError: Could not
initialize COM: HRESULT=0x80010106
at java.desktop/sun.awt.shell.Win32ShellFolderManager2.initializeCom(Native Method)
at java.desktop/sun.awt.shell.Win32ShellFolderManager2$ComInvoker$1.run(Unknown Source at java.base/java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
HRESULT=0x80010106意味着RPC_E_CHANGED_MODE我猜意味着COM以某种方式已经在MTA模式初始化.但为什么这只是Windows Bridge沙箱中的一个问题?pre-initialize出于某种原因,Windows桥以某种方式某种程度上是COM吗?
我不确定这是Java 9问题,还是Desktop Bridge问题,或两者兼而有之.有没有人对如何确定问题的原因或解决方法有任何想法?
我已经制作了一个最小的示例项目来重现该问题
应用程序在直接执行时有效,但在通过APPX启动程序执行时无效.为什么?
我想知道是否有任何漂亮的方式使用新的Stream API来"分组"值序列.
例如,将一系列整数拆分为整数组,其中每个组都是一个递增的数字序列:
IntStream seq = IntStream.of(1, 2, 3, -1, -1, 1, 2, 1, 2);
IntFunction next = i -> i + 1;
// DESIRED OUTPUT: [[1,2,3], [-1], [-1], [1,2], [1,2]]
Run Code Online (Sandbox Code Playgroud) 找出 .app 包启动后立即崩溃的原因的最佳方法是什么?Mac OS X 是否将日志存储在任何地方?
例如,这不起作用,并且立即崩溃:
open /Applications/MyApp.app
Run Code Online (Sandbox Code Playgroud)
但是,直接调用可执行文件似乎可以工作:
/Applications/MyApp.app/Contents/MacOS/MyAppLauncher
Run Code Online (Sandbox Code Playgroud)
Info.plist应该没问题并指向正确的可执行文件:
<key>CFBundleExecutable</key>
<string>MyAppLauncher</string>
Run Code Online (Sandbox Code Playgroud)
据我所知,OS X 甚至从不调用我的代码。我怎样才能知道它正在做什么以及为什么失败?
注意:此应用程序使用沙箱,因此我认为它与此有关。但我想看到一些日志来证实这一点。
app-bundle ×1
debugging ×1
java ×1
java-8 ×1
java-9 ×1
java-stream ×1
lambda ×1
macos ×1
sorting ×1