JavaFx浏览器的MagicDraw插件
我正在使用JavaFx框架编写Magicdraw插件,以添加新的浏览器。以下是LibraryBrowser类中新浏览器的初始化代码JavaFx浏览器的MagicDraw插件,javafx,jfxpanel,magic-draw,Javafx,Jfxpanel,Magic Draw,我正在使用JavaFx框架编写Magicdraw插件,以添加新的浏览器。以下是LibraryBrowser类中新浏览器的初始化代码 private static final WindowComponentInfo info = new WindowComponentInfo("test_browser", "Test Browser", null, ProjectWindowsManager.SIDE_WEST, ProjectWindowsManager.STATE_DOCK
private static final WindowComponentInfo info = new WindowComponentInfo("test_browser", "Test Browser", null,
ProjectWindowsManager.SIDE_WEST, ProjectWindowsManager.STATE_DOCKED, true);
public LibraryBrowser() {
Browser.addBrowserInitializer(new Browser.BrowserInitializer() {
@Override
public void init(@Nonnull Browser browser, @Nonnull Project project) {
browser.addPanel(new LibraryBrowserView(info)); //add library view
}
@Override
public WindowComponentInfoRegistration getInfo() {
return new WindowComponentInfoRegistration(info, null);
}
});
}
其中LibraryBrowserView是一个扩展ExtendedPanel的类,实现WindowComponent,如下所示代码
public class LibraryBrowserView extends ExtendedPanel implements WindowComponent {
private WindowComponentInfo info;
public LibraryBrowserView(WindowComponentInfo info) {
//Set WindowComponentInfo
this.info = info;
JFXPanel fxPanel = new JFXPanel();
add(fxPanel);
fxPanel.setVisible(true);
Group root1 = new Group();
Scene scene = new Scene(root1, Color.ALICEBLUE);
Text text = new Text();
text.setX(40);
text.setY(100);
text.setFont(new Font(25));
text.setText("Test JavaFX!");
root1.getChildren().add(text);
fxPanel.setScene(scene);
}
@Override
public WindowComponentContent getContent() {
return new BrowserWindowComponentContext(this);
}
@Override
public WindowComponentInfo getInfo() {
return info;
}}
class BrowserWindowComponentContext implements WindowComponentContent {
private JPanel panel;
public BrowserWindowComponentContext(JPanel panel) {
this.panel = panel;
}
@Override
public Component getWindowComponent() {
return panel;
}
@Override
public Component getDefaultFocusComponent() {
return panel;
}}
当我打开MagicDraw时发生错误
java.lang.UnsatisfiedLinkError: com.sun.prism.d3d.D3DVertexBuffer.nDrawIndexedQuads(J[F[BI)I
NoMagic代表只声明他们不使用JavaFX;它们不表示MagicDraw与JavaFX不兼容。这是好的,因为如果他们那样说,他们就错了。我们已经创建了许多使用JavaFX的MagicDraw插件 Nasa在github上的OpenMBEE MDK项目包含了一个如何实现这一点的示例。在插件类中,他们加载所需的扩展名.jars,然后调用此方法:
private void initJavaFX() {
try {
Class.forName("javafx.application.Platform");
} catch (ClassNotFoundException e) {
System.err.println("[WARNING] JavaFX libraries are unavailable. Please add \"-Dorg.osgi.framework.bundle.parent=ext\" to the \"JAVA_ARGS\" line in your properties file(s) in your MagicDraw bin directory and restart.");
return;
}
new Thread(() -> {
try {
Class<?> clazz = Class.forName("gov.nasa.jpl.mbee.mdk.MDKApplication");
Method method = clazz.getMethod("main", String[].class);
method.invoke(null, new Object[]{new String[]{}});
} catch (Exception | Error e) {
System.err.println("[WARNING] Failed to initialize JavaFX application. JavaFX functionality is disabled.");
e.printStackTrace();
}
}, "JavaFX Init").start();
}
private void initJavaFX(){
试一试{
Class.forName(“javafx.application.Platform”);
}catch(classnotfounde异常){
System.err.println(“[警告]JavaFX库不可用。请将\“-Dorg.osgi.framework.bundle.parent=ext\”添加到MagicDraw bin目录中属性文件的\“JAVA_ARGS\”行,然后重新启动。”);
返回;
}
新线程(()->{
试一试{
Class clazz=Class.forName(“gov.nasa.jpl.mbee.mdk.MDKApplication”);
方法Method=clazz.getMethod(“main”,String[].class);
调用(null,新对象[]{newstring[]{});
}捕获(异常|错误e){
System.err.println(“[警告]未能初始化JavaFX应用程序。JavaFX功能已禁用。”);
e、 printStackTrace();
}
},“JavaFX Init”).start();
}
以下是链接:
有关为什么这样做的更多信息,请查看这篇Oracle文章:(magicdraw是一个swing应用程序,以防您不知道)