Плагин MagicDraw для браузера с JavaFx - PullRequest
0 голосов
/ 14 мая 2018

Я пишу плагин Magicdraw с JavaFx Framework для добавления нового браузера.Ниже приведен код инициализации нового браузера в классе LibraryBrowser.

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

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Представители NoMagic только заявляют, что они не работают с JavaFX;они не заявляют, что MagicDraw не совместим с JavaFX.Что хорошо, потому что они были бы неправы, если бы сказали это.Мы создали несколько плагинов MagicDraw, которые используют JavaFX.

Проект Nasa OpenMBEE MDK на github содержит пример того, как это можно сделать.В своем классе плагинов они загружают необходимое расширение .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();
}

Вот ссылка: https://github.com/Open-MBEE/mdk/blob/develop/src/main/java/gov/nasa/jpl/mbee/mdk/MDKPlugin.java.

Для получения дополнительной информации о причинах этогоРаботы, ознакомьтесь с этой статьей Oracle: Интеграция JavaFX в приложения Swing (magicdraw - это приложение Swing, если вы не знали)

0 голосов
/ 02 июня 2018

Никто из представителей Magic на своем форуме не заявил, что MagicDraw несовместим с JavaFX:

https://community.nomagic.com/post15641.html?hilit=javafx#p15641

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...