Matlab:在spmd中使用第三方java类
我试图从Matlab:在spmd中使用第三方java类,java,matlab,parallel-processing,Java,Matlab,Parallel Processing,我试图从spmd中使用来自第三方Java库的类,但我不断收到与导入它相关的各种错误 下面是一个相当简单的示例: spmd (1) javaaddpath([pwd 'lib/guava-10.0.1.jar']); import com.google.common.collect.MinMaxPriorityQueue; pq = MinMaxPriorityQueue.create(); end 这给了我一个错误 ??? Error: MATLAB cannot de
spmd
中使用来自第三方Java库的类,但我不断收到与导入它相关的各种错误
下面是一个相当简单的示例:
spmd (1)
javaaddpath([pwd 'lib/guava-10.0.1.jar']);
import com.google.common.collect.MinMaxPriorityQueue;
pq = MinMaxPriorityQueue.create();
end
这给了我一个错误
??? Error: MATLAB cannot determine whether "MinMaxPriorityQueue" refers to a
function or variable.
See <a href="matlab: helpview([docroot
'/toolbox/distcomp/distcomp_ug.map'],'SPMD_LIMITATIONS')">SPMD in MATLAB,
"Limitations"</a>.
抓住我
The class "com.google.common.collect.MinMaxPriorityQueue" is undefined.
Perhaps Java is not running.
但是Java肯定在运行,因为
spmd (1)
pq = java.util.PriorityQueue();
end
及
work(ArrayPriorityComparator
是/lib
中的一个独立java类)
在我看来,这就像Matlab解析spmd
块时遇到的问题。但是我不认为我可以使用javaObject()
或javaMethod()
来解决这个问题,因为我必须调用一个静态方法来创建这个对象,而且我不能仅仅将它扔进eval
中,因为我得到了一个透明度冲突错误(或者,如果我把它放在spmd
之外定义的匿名函数中,我会得到相同的类是未定义的
错误)
有什么想法吗?欢迎使用真正的解决方案或可怕的骇客。您是否尝试过使用pctrunall
设置java路径
恐怕我没有一个方便的集群来测试它是否有效。我想这是另一个“动态类路径”问题。请参阅如何使用“静态类路径”
在不依赖静态类路径的情况下,请使用以下文章中描述的方法
相同的结果(如果在匿名函数中执行,则类未定义,如果直接在spmd
块中,则无法确定是函数还是变量)。我真的不明白为什么它会和在spmd
块中执行javaaddpath
有什么不同……尽管我想用matlab你永远不会知道。哦,这是值得一试的。如果你幸运的话,@EdricEllis会出现并给你正确的答案。嗯,这将是我的建议。可惜它不起作用。javaddpat他必须做一些疯狂的事情,也许这就是为什么它不起作用。
spmd (1)
pq = java.util.PriorityQueue();
end
spmd (1)
javaaddpath([pwd '/lib']);
pq = ArrayPriorityComparator.create();
end