小编Mic*_*ael的帖子

如何使用Java 11捆绑和启动本机Mac/Windows应用程序?

不幸的是,该javapackager工具将被JDK 11删除 - 因为它是JavaFX的一部分,它也将被删除.因此,不再有"官方"和简单的方法来为Mac或Windows创建本机Java应用程序包.

我试图重新使用Java 9/10的javapackager(在Mac上my.app/Contents/MacOS/my)生成的本机启动器文件,它们似乎仍然可以与JDK 11一起使用.但这有点像一个肮脏的解决方案.有关如何使用Java 11及更高版本本地打包和启动应用程序的任何想法(首选Mac平台)?

java bundle javafx javafx-11

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

如何在Eclipse中访问内部Java包?

我在Eclipse中使用Java 11(或Java 10)打开了一个遗留Java(8)项目.Eclipse现在正在抱怨无法访问的软件包.例如com.apple.laf.AquaComboBoxUI.

从命令行编译时,我可以通过添加参数来显式访问这些包javac:

--add-exports java.desktop/com.apple.laf=ALL-UNNAMED

有没有办法在Eclipse IDE中执行相同的操作?我试图在JDK库上添加一个可访问的规则.但这似乎没有效果.有任何想法吗?

是的,我知道,我们应该将项目迁移到仅使用官方API.但那是漫长的道路......

java eclipse legacy-code java-11

5
推荐指数
1
解决办法
1402
查看次数

macOS M1 上虚拟文件系统 (VFS) 内核扩展的替代方案

我们为macOS 上的虚拟文件系统 (VFS )开发了内核扩展 (KEXT),以将我们的软件与 Adob​​e InDesign 或 Microsoft Word 等外部​​程序集成。我们的软件和 KEXT 被许多客户使用。

看起来 KEXT 已被弃用,并且可能会在 macOS 的未来版本中完全删除,特别是在基于 Apple Silicon 的计算机上。请参阅 Apple 在其 安全指南中的声明:

“这就是为什么我们强烈鼓励开发人员在 macOS 中删除对未来采用 Apple 芯片的 Mac 电脑的 kext 支持之前采用系统扩展”

因此,我们目前正在研究可能的替代方案。

Apple 建议迁移到系统扩展而不是 KEXT。然而,我们发现的唯一与 VFS 相关的 API 是实现一个基于NSFileProviderReplicatedExtension 的文件提供程序

不幸的是,它NSFileProviderReplicatedExtension有几个缺陷:

  1. 文件可以存储在云端或下载。无法仅下载/读取文件的一部分。这对我们来说是一个很大的性能问题,因为我们处理的是大图像(> 1GB)。我们集成的程序通常只读取图像的一部分,例如嵌入的预览。API 不提供访问文件的选定块(随机访问文件)的方法。
  2. 文件提供者通过enumerators. 因此,必须首先枚举(列出)文件夹内的所有内容。否则无法访问。但是,我们无法枚举我们的 VFS。我们的 VFS 的大部分内容都是完全动态的。它仅在客户端第一次访问时存在。此类动态内容还包括动态参数,例如客户端的区域设置或将放置图像的框的大小。由于我们事先不知道这些参数,因此我们无法提前枚举VFS的内容。

这意味着,NSFileProviderReplicatedExtension当前状态下的 an 并不是“真实”VFS 的替代品,因此我们不能将其用作当前 VFS KEXT 的替代品。

我的问题:

  1. Apple 是否还会允许在(基于 Apple Silicon/M1 的)操作系统的未来版本中进行内核扩展?或者至少有一个明确的期限?
  2. 如果不是,Apple …

macos vfs kernel-extension fileprovider-extension macos-system-extension

5
推荐指数
1
解决办法
1084
查看次数

macOS 上 Swift 的 FileHandle.read 或数据缓冲区中的内存泄漏

FileHandle我尝试使用类和函数使用 Swift 读取 macOS 上的文件

@available(macOS 10.15.4, iOS 13.4, watchOS 6.2, tvOS 13.4, *)
public func read(upToCount count: Int) throws -> Data?
Run Code Online (Sandbox Code Playgroud)

原则上这工作得很好。但是,我面临着内存泄漏。返回的数据缓冲区中分配的数据不会被释放。这可能是底层 Swift 包装器中的错误吗?

这是我的测试函数,它逐块读取文件(否则对数据不执行任何操作)。(是的,我知道,该函数很愚蠢,其唯一目的是证明内存泄漏问题。)

func readFullFile(filePath: String) throws {
    let blockSize = 32 * 1024
    guard let file = FileHandle(forReadingAtPath: filePath) else {
        fatalError("Failed to open file")
    }
    while (true) {
        guard let data = try file.read(upToCount: blockSize) else {
            break
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在循环中调用该函数,并观察程序的内存消耗,我可以看到内存在每个循环步骤中都会增加读取文件的大小,并且永远不会释放。

任何人都可以确认此行为或知道如何解决它吗?

我的环境:

  • macOS 11.3.1 大苏尔
  • 代码12.5

最好的,迈克尔

macos swift

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