- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是一个非常奇怪的应用程序,请耐心等待。主要应用程序由一个 Matlab 后端和一个用 Java Swing 编写的 UI 组成。要启动该应用程序,您可以从命令行执行类似以下操作:
matlab -r "initMatlab;runJavaUI;"
假设 initMatlab
和 runJavaUI
都是作为该命令的结果生成的 matlab 运行时路径上的 Matlab 函数。这基本上生成了一个 matlab 实例,然后在 matlab 启动后立即运行这两个 matlab 函数。奇怪的是,这个命令行选项并不适用于所有操作系统。此外,并非所有版本的 Matlab 都与所有版本的 Java 兼容(我们的客户想要使用真正旧的 Matlab 安装...不能让他们改变它)。
所以...我们提供了一个 Java 可执行 Jar,它会根据您正在运行的操作系统自动生成命令行参数 - 用户只需双击它即可打开一个小 UI,然后会显示一些选项。我将此 jar 称为 Launcher。此启动器 检测所有已安装的 Java 和 Matlab 实例,并允许用户选择要使用的 Java 和 Matlab 组合。该 jar 使用 ProcessBuilder
来启动 matlab 命令,它工作正常,除了一件事。在 Windows 中,Launcher 可以很好地启动 Matlab,我们看到 Matlab 控制台出现,然后 Java UI 按预期出现。但是,在运行 Mountain Lion(我相信是 10.8)的 Mac 上,Matlab 控制台从未出现——但这并不是说 Matlab 没有运行——我仍然可以从 Java UI 调用 Matlab。这不会阻止用户使用 UI,但有时 Matlab 会将错误消息转储到控制台,这是有问题的,因为在 Mac 上,用户永远不会知道什么时候出了问题。最奇怪的是,我尝试打印出生成的命令行,它在通过 ProcessBuilder
启动时不会生成 Matlab 控制台,但在启动时会生成 Matlab 控制台通过终端。再一次,Matlab 并非无法启动,而是无法使其自己的 UI 可见。
我曾尝试在启动 Matlab 之前将所有 Launcher 的环境变量复制到 ProcessBuilder
中,但无济于事。所以我不得不让这个有点开放,但是有没有人尝试使用 ProcessBuilder
运行 Matlab,如果是,你做了什么让 Matlab 控制台出现在 Mac OS Mountain 上狮子?
中南合作商会
将此代码导出到可运行的 jar 文件中,然后在 Mac OS Mountain Lion 上运行以下命令:
java -jar launch-matlab.jar /absolute/path/to/matlab
您应该会看到 Matlab 图标出现在停靠栏中,但您将无法使 Matlab 控制台窗口可见。如果您在 Windows 中运行它,Matlab 控制台将按预期显示。
public class LaunchMatlab {
public static void main(String[] args) throws Exception{
String matlabExe = "matlab";
if(args != null && args.length > 0) matlabExe = args[0];
ProcessBuilder pb = new ProcessBuilder();
pb.command(matlabExe,"-wait");
pb.environment().putAll(System.getenv());
System.err.println("Launching Matlab using following PB args: "+
pb.command());
Process p = pb.start();
System.err.println("Waiting for Matlab to exit ...");
p.waitFor();
System.err.println("Matlab exited, launcher exiting ...");
}
}
最佳答案
您需要使用 -desktop
标志指定 MATLAB 以可见的 UI 运行。我不相信这是记录在案的。
所以你需要运行的命令是
matlab -desktop -r "initMatlab;runJavaUI;"
我创建了一个名为 matlabcontrol 的 Java 库可以将所有这些从你身上抽象出来。它可以在 Windows、OS X 和 Linux 上运行时启动 MATLAB,然后允许您通过 eval 和 feval 命令与 MATLAB 交互。 matlabcontrol 启动 MATLAB 的代码位于 matlabcontrol.RemoteMatlabProxyFactory的 createProcess(...)
方法。如果您将 matlabcontrol 用作 Java 库,您将不会直接与此类或此方法交互。
关于java - 从 java ProcessBuilder 启动 Matlab,Matlab 控制台不会出现在 Mac OS 10.8 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816385/
尝试使用集成到 QTCreator 的表单编辑器,但即使我将插件放入 QtCreator.app/Contents/MacOS/designer 也不会显示。不过,相同的 dylib 文件确实适用于独
在此代码示例中。 “this.method2();”之后会读到什么?在返回returnedValue之前会跳转到method2()吗? public int method1(int returnedV
我的项目有通过gradle配置的依赖项。我想添加以下依赖项: compile group: 'org.restlet.jse', name: 'org.restlet.ext.apispark', v
我将把我们基于 Windows 的客户管理软件移植到基于 Web 的软件。我发现 polymer 可能是一种选择。 但是,对于我们的使用,我们找不到 polymer 组件具有表格 View 、下拉菜单
我的项目文件夹 Project 中有一个文件夹,比如 ED 文件夹,当我在 Eclipse 中指定在哪里查找我写入的文件时 File file = new File("ED/text.txt"); e
这是奇怪的事情,这个有效: $('#box').css({"backgroundPosition": "0px 250px"}); 但这不起作用,它只是不改变位置: $('#box').animate
这个问题在这里已经有了答案: Why does OR 0 round numbers in Javascript? (3 个答案) 关闭 5 年前。 Mozilla JavaScript Guide
这个问题在这里已经有了答案: Is the function strcmpi in the C standard libary of ISO? (3 个答案) 关闭 8 年前。 我有一个问题,为什么
我目前使用的是共享主机方案,我不确定它使用的是哪个版本的 MySQL,但它似乎不支持 DATETIMEOFFSET 类型。 是否存在支持 DATETIMEOFFSET 的 MySQL 版本?或者有计划
研究 Seam 3,我发现 Seam Solder 允许将 @Named 注释应用于包 - 在这种情况下,该包中的所有 bean 都将自动命名,就好像它们符合条件一样@Named 他们自己。我没有看到
我知道 .append 偶尔会增加数组的容量并形成数组的新副本,但 .removeLast 会逆转这种情况并减少容量通过复制到一个新的更小的数组来改变数组? 最佳答案 否(或者至少如果是,则它是一个错
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
noexcept 函数说明符是否旨在 boost 性能,因为生成的对象中可能没有记录异常的代码,因此应尽可能将其添加到函数声明和定义中?我首先想到了可调用对象的包装器,其中 noexcept 可能会产
我正在使用 Angularjs 1.3.7,刚刚发现 Promise.all 在成功响应后不会更新 angularjs View ,而 $q.all 会。由于 Promises 包含在 native
我最近发现了这段JavaScript代码: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 我使用
我正在编写一个玩具(物理)矢量库,并且遇到了 GHC 坚持认为函数应该具有 Integer 的问题。是他们的类型。我希望向量乘以向量以及标量(仅使用 * ),虽然这可以通过仅使用 Vector 来实现
PHP 的 mail() 函数发送邮件正常,但 Swiftmailer 的 Swift_MailTransport 不起作用! 这有效: mail('user@example.com', 'test
我尝试通过 php 脚本转储我的数据,但没有命令行。所以我用 this script 创建了我的 .sql 文件然后我尝试使用我的脚本: $link = mysql_connect($host, $u
使用 python 2.6.4 中的 sqlite3 标准库,以下查询在 sqlite3 命令行上运行良好: select segmentid, node_t, start, number,title
我最近发现了这段JavaScript代码: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 我使用
我是一名优秀的程序员,十分优秀!