如何使用特定工作目录运行/调试Netbeans Platform应用程序?

时间:2013-12-24 19:11:31

标签: java c++ netbeans dll jna

目标

我目前正在使用Windows上的Netbeans平台在Netbeans中开发一个应用程序(一个跨平台的解决方案会很精彩但是如果需要的话,对于Windows来说这个问题很好)。应用程序通过JNA与本机C ++ DLL进行通信。 DLL位于指定的目录中,我无法控制或更改 - 例如 C:\ DLL

DLL本身会加载一些文件以便读取值等,但它使用相对路径来完成此操作。因此它需要“当前”目录为C:\ DLL。同样,这是我在这个项目中无法改变的。 DLL是我必须与之通信的(不幸的是)。

问题

对于常规JAVA应用程序,我已经在Netbeans中选择设置已启动应用程序的工作目录,如下所示:

http://i.imgur.com/3HuQKS8.png

但是在Netbeans Platform框架/模板中没有这样的选择。在大多数情况下,看起来Netbeans只是将我在“编辑器”窗格中关注的当前文件的目录设置为当前工作目录。

那我该怎么做呢?我可能能够通过位于C:\ DLL中的快捷方式运行应用程序,但是当我通过Netbeans调试应用程序时,这没有用。

我想知道如何使用当前工作目录集运行/调试此Netbeans平台应用程序。

澄清Netbeans平台 Netbeans平台是各种应用程序框架。具有基于“模块”的预定义结构,这些模块相互作用以形成完整的应用程序。整个事情都在Netbeans平台环境中托管,该环境为每个模块提供选项卡/对接窗口。很高兴开发更大的应用程序。

此处提供更多信息:https://netbeans.org/kb/trails/platform.html

1 个答案:

答案 0 :(得分:1)

我已经建议使用chdir作为@technomage(我似乎无法用他当前的帐户状态来评价他/她的评论)。

为此,我在通过JNA加载C ++ DLL之前使用了以下代码。

NativeLibrary clib = NativeLibrary.getInstance(null);
int result = clib.getFunction("_chdir").invokeInt(new Object[]{"<PATH GOES HERE>"});

来源:https://www.java.net/node/643965#comment-821128

您还可以通过查看result变量来检查结果。如果一切顺利,应该为零。

我不确定为什么null适用于NativeLibrary.getInstance。文档没有具体说明这一点,我无法从源代码中收集任何内容:https://github.com/twall/jna/blob/master/src/com/sun/jna/NativeLibrary.java - 但是传递null似乎可以为您的平台提供默认的libc或等效文件。

另请注意,我必须在函数名称中添加_(下划线)。这与在Windows上编译时函数调用如何被破坏有关。据我所知,这在其他平台上并不需要,但我现在没有能力对此进行测试。

由于我不确定我的电话是否真的有效,我先做了以下几点:

Function f = clib.getFunction("_chdir");

这将返回一个函数“pointer”f,您可以跟踪/调试它以查看是否有有效的引用。幸运的是,在我的情况下,我所要做的就是添加下面的源链接中建议的下划线。

在调用chdir之后,我需要访问的C ++ DLL很乐意访问相对于chdir中指定位置的文件。