草庐IT

java - JNA和JNR有什么区别

根据here的图片这两个库都按照相同的原则工作。但我相信它们之间是有区别的。这是什么区别? 最佳答案 JNA使用反射来调用本地方法。JNR仅在运行时生成一次字节码,因此JNR比JNA运行得更快。查看代码生成here的示例 关于java-JNA和JNR有什么区别,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/44760972/

java - JNA 捕获异常

我有一个关于处理JNA下的库抛出的异常的快速问题...当我在底层native代码中抛出异常时,JNA收到无效内存访问错误。我假设这是因为C库不能通过它的堆栈抛出异常(它实际上是C++/CLR但有C导出)?那么有没有真正的办法向Java报告异常呢?或者“它应该工作”而我只是在做一些非常错误的事情吗?DllExportvoidInitialize(char*dir){throwgcnewSystem::Exception("Testing");}如果Java能够检测到这些抛出的异常,那就太好了,我想我实际上可以考虑将内存指针传递到我所有的C导出并检查它们是否为空,但看起来像迂回的方式。

Java Native Access 不执行 C++,对吧?

我在网上找到了很多关于JNA用于C++库的引用资料(包括一些在stackoverflow上的引用资料),但是我在JNA文档中找不到的任何内容都表明这是可能的。似乎没有任何方法可以包装C++类,特别是。我需要本地访问权限才能使用RTAudio,但RTAudio的所有函数都是RTAudio类的成员函数。所以只是为了确认,JNA不是正确的方法吗? 最佳答案 这个问题相当于在问howtocallC++instancemethodsusingJNA,这是可能的,但你将不得不做一些工作。特别是,您需要编写一个包装器,其中extern"C"是您实

java - 如何在 Windows/Linux/MacOS 系统启动时运行 Java 应用程序?

如何在Windows/Linux/MacOS系统启动时运行Java应用程序?JNA/JNI的任何实现都将受到欢迎。 最佳答案 看看http://wrapper.tanukisoftware.org.它为java应用程序提供了一个包装器,以便在各种操作系统下运行。您可以使用社区版。 关于java-如何在Windows/Linux/MacOS系统启动时运行Java应用程序?,我们在StackOverflow上找到一个类似的问题: https://stackover

java - 如何移动(或使用)鼠标

如何使用Java和JNA(Javanative访问)与WindowsAPI交互?。我试图通过在鼠标输入流上排队鼠标事件来让鼠标做某事,并且代码有效,因为SendInput(...)方法返回1表明它已成功将事件排队,但鼠标本身什么也不做。我的SSCCE:编辑:编辑以填充dwFlags字段。我已经尝试了几种常量组合,无论是单独组合还是位组合,但仍然没有成功。同样,SendInput方法返回1,因为它应该建议一个有效的方法,但鼠标没有移动:importcom.sun.jna.Native;importcom.sun.jna.platform.win32.WinDef.*;importcom.

java - 如何在 JNA 中映射枚举

我有以下枚举我如何在jna中映射??这个枚举在结构中被进一步引用。typedefenum{eFtUsbDeviceNotShared,eFtUsbDeviceSharedActive,eFtUsbDeviceSharedNotActive,eFtUsbDeviceSharedNotPlugged,eFtUsbDeviceSharedProblem}eFtUsbDeviceStatus;阿卜杜勒哈利克 最佳答案 如果您使用的是JNA,您可能希望在Java中显式指定枚举的值。默认情况下,Java的基本枚举类型并没有真正为您提供该功能,您

Java:制作窗口点击(包括文本/图像)

我想在Java中创建一个透明、始终位于顶部并且我可以点击的叠加层。我找到了一些similarposts关于这个问题,但即使按照他们的回答,我也遇到了一个问题。我的问题是点击整个窗口。我在使用JFrame时没有遇到任何问题,但是一旦我向它添加任何组件(JLabel或ImagePanel),click-through属性就不会保留给他们。因为我想为我的应用程序设置一个背景图像,所以这基本上使我所使用的代码无法查看每当我单击文本/图像覆盖的区域时窗口如何聚焦。在展示我正在使用的代码之前,我想先引用一下thesethreads它基本上精确地描述了我想要的,除了C#。我的目标是创建一个覆盖层,其

java - 我如何在 Java 中获取打印机的品牌和型号?

我实际上正在开发一个将打印机共享到服务器的Java应用程序,我需要这个应用程序来获取它共享的打印机的品牌和型号。我知道这个问题已经被问了三四次,但似乎没有人找到答案。我试过这段代码:PrintService[]printServices=PrintServiceLookup.lookupPrintServices(null,null);for(PrintServiceprinter:printServices){System.out.println(printer.getDefaultAttributeValue(PrinterMakeAndModel.class));System.o

java - 使用 JNA 将 Java 类传递给 void* 参数

我在C中有一个函数,我试图用JNA从Java中调用它:intmyCfunc(void*s,int*ls);根据JNAdocumentationvoid*需要com.sun.jna.Pointer传递给函数。在带有JNA的Java中,我相信上面的函数将被包装如下:publicinterfacemyWrapperextendsLibrary{publicintmyCfunc(Pointers,IntByReferencels);}需要链接到Pointer,并传入参数s的对象将是实现JNAStructure的类,例如:publicclassmyClassextendsStructure{pu

java - 如何将 Java 程序的入口点更改为 C 签名?

我一直在玩JNA,试图在Java程序中执行一些C代码。这是我在网上找到的一个工作示例(构建路径中需要JNA):packagecore;importcom.sun.jna.Library;importcom.sun.jna.Native;importcom.sun.jna.Platform;publicclassCoreController{publicinterfaceCLibraryextendsLibrary{CLibraryINSTANCE=(CLibrary)Native.loadLibrary((Platform.isWindows()?"msvcrt":"c"),CLibr