我将Swing和Java3D结合在一起.应使用Event Dispatcher Thread完成swing组件的操作,而Java3D组件的操作应在BehaviourSchedulerThread中完成.
Java3D渲染场景,然后执行与场景关联的所有行为.
我在Canvas3D上启用了MouseListener.事件将发布到AWT事件队列中.然后我想基于这些事件修改Java3D环境,所以我使用了一个特殊的行为,我可以将Runnable发布到.这确保Runnable在Java3D的行为周期中执行(并且在渲染周期期间不要修改任何内容).
假设行为中的某些操作想要修改Swing模型.然后我必须向EDT发布一个新的Runnable.
这是正确的方法吗?
使用这种技术,我在鼠标监听器上遇到了很多问题.我在行为中更新了Java3D模型中的一个点,同时更新了swing GUI.
更新:问题可以更明确地定义如下:
我有一个JButton"旋转立方体",它有一个ActionListener.一旦触发了ActionListener,它就会将AWTEvent推送到Java3D行为中.一旦行为触发,它会修改场景图,然后修改JButton actionListener和文本以变为"停止旋转".
StopSpinningActionListener.SpinActionListener.实际发生的是以下内容:
AWTEvent被派遣到了SpinActionListener.这将创建一个在J3D行为内执行的Runnable.显然,我不应该依赖于AWTEvent的顺序处理.我不能在EDT中等待触发行为,因为任何SwingUtilities.invokeAndWait()都会导致死锁.
我正在开发基于Eclipse RCP的应用程序.我想在我的应用程序中分析特定的方法:删除元素和刷新部分.
我成功地将VisualVM启动插件连接到Eclipse.在我的应用程序运行后,我从VisualVM执行了Profiler并在正在分析的应用程序中拖动/刷新了一些东西.最后,我没有在调用堆栈中看到相应的方法.我找不到任何对我的东西负责的方法,我什么也做不了.
为什么会这样?如果我在整个应用程序启动之前运行VisualVM - 一切似乎都没问题.每个方法在调用堆栈中都有正确的位置.我很好奇VisualVM的局限性.
我正在Eclipse RCP中开发一个应用程序.我需要有关服务设计的设计决策方面的帮助.
我有一些用于REngine向其他模块提供对象的bundle .它REngine是计算引擎的接口,可以通过多种方式实现.捆绑包通过连接到远程服务器或启动本地计算线程来提供REngine实例.一些捆绑包需要通过GUI进行配置(但也需要在无头平台上提供).客户端Bundle可以请求多个REngine对象进行并行计算.
我目前注册这些模块以提供REngine服务.该服务由ServiceFactory创建,该服务启动本地计算实例或远程(服务器)实例.客户负责尝试REngine该类的所有服务注册并选择正确的服务注册.
执行此操作的代码可归纳如下:
class API.REngine { ... }
class REngineProvider.Activator {
public void start(BundleContext ctx) {
ctx.registerService(REngine.class.getName(), new REngineFactory(), null);
}
}
class REngineProvider.REngineFactory implements ServiceFactory {
public Object getService(Bundle bundle, ServiceReference reference) {
return new MyREngineImplementation();
}
public void ungetService(REngine service) {
service.releaseAssociatedResources();
}
}
class RConsumer.Class {
REngine getREngine() {
ServiceReference[] references = bundleContext.getAllServiceReferences(REngine.class.getName(), null);
for(ServiceReference ref: references) {
try {
return bundleContext.getService(ref);
} catch …Run Code Online (Sandbox Code Playgroud) 我正在构建一个R包并使用data-raw和data存储预定义RxODE模型库.这非常有效.
但是,生成的.rda文件会在每一代都发生变化.某些模型包含R环境,序列化似乎包含"创建时间"时间戳.这意味着每次data/重新生成目录时,所有文件都已更改...
是否有某种方法可以将R环境的序列化修改为可重现?
storeFile <- function(file) {
env <- new.env()
fun <- function(x) {x+3}
environment(fun) <- env
save('fun', file = file, ascii=TRUE)
}
storeFile('fileA.rda')
storeFile('fileB.rda')
message("Files are identical? ", identical(readLines('fileA.rda'), readLines('fileB.rda')) )
Run Code Online (Sandbox Code Playgroud) 我有一些关于 OSGi 片段和Class.forName(). 下面的例子说明了我的问题。
我有一个第三方包Foo。我不能Foo以任何方式修改。该包包含以下类:
public class Serializer {
public String summarizeClass(String className) {
Class<?> myClass = Class.forName(className);
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果我从 bundle Barfor调用此方法org.myPackage.MyClass,它将失败,因为MyClass它不在 bundle 的类路径上Foo。
我可以简单地添加一个Foo.fragment依赖于Barto的片段来修改 bundle 的类路径Foo吗?还是这种依赖只适用于片段中的类?
长话短说:Class.forName()OSGi中的语义是什么,当在 Host 包的类中执行时?是否包括:
java ×4
eclipse-rcp ×2
osgi ×2
concurrency ×1
java-3d ×1
profiling ×1
r ×1
r-package ×1
swing ×1
visualvm ×1