You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LibreOffice UNO扩展中启动Swing应用及相关嵌入方案咨询

如何在LibreOffice UNO扩展中启动Swing应用及相关嵌入方案咨询

我之前已经了解到,是可以把Swing的JPanel放到AWT Panel里的。现在我遇到了新的问题:据我所知LibreOffice的Java扩展用的是UNO-AWT,那有没有办法把我词汇训练器的主JPanel加到LibreOffice的UNO-AWT当中呢?

UPDATE
现在我又了解到,我的Swing应用应该作为扩展在新窗口中启动,想请教一下具体该怎么操作?

UPDATE
我找到了一个LibreOffice启动扩展的示例项目,知道其中的StarterProjectImpl是入口类,代码如下:

package org.libreoffice.example.comp;

import com.sun.star.uno.XComponentContext;
import com.sun.star.lib.uno.helper.Factory;

import org.libreoffice.example.dialog.ActionOneDialog;
import org.libreoffice.example.helper.DialogHelper;

import com.sun.star.lang.XSingleComponentFactory;
import com.sun.star.registry.XRegistryKey;
import com.sun.star.lib.uno.helper.WeakBase;


public final class StarterProjectImpl extends WeakBase
   implements com.sun.star.lang.XServiceInfo,
          com.sun.star.task.XJobExecutor
{
    private final XComponentContext m_xContext;
    private static final String m_implementationName = StarterProjectImpl.class.getName();
    private static final String[] m_serviceNames = {
        "org.libreoffice.example.StarterProject" };


    public StarterProjectImpl( XComponentContext context )
    {
        m_xContext = context;
    };

    public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) {
    XSingleComponentFactory xFactory = null;

        if ( sImplementationName.equals( m_implementationName ) )
            xFactory = Factory.createComponentFactory(StarterProjectImpl.class, m_serviceNames);
        return xFactory;
    }

    public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) {
    return Factory.writeRegistryServiceInfo(m_implementationName,
                                            m_serviceNames,
                                            xRegistryKey);
    }

    // com.sun.star.lang.XServiceInfo:
    public String getImplementationName() {
         return m_implementationName;
    }

    public boolean supportsService( String sService ) {
    int len = m_serviceNames.length;

    for( int i=0; i < len; i++) {
        if (sService.equals(m_serviceNames[i]))
            return true;
        }
        return false;
    }

    public String[] getSupportedServiceNames() {
        return m_serviceNames;
    }

    // com.sun.star.task.XJobExecutor:
    public void trigger(String action)
{
    switch (action) {
    case "actionOne":
        ActionOneDialog actionOneDialog = new ActionOneDialog(m_xContext);
        actionOneDialog.show();
        break;
    default:
        DialogHelper.showErrorMessage(m_xContext, null, "Unknown action: " + action);
    }
    
}

}

我现在搞不懂的是,怎么在这个类里启动我的Swing应用呢?

UPDATE
还有一个想法想问下可行性:能不能走这样的嵌入路径——UNO-AWT-panel → 嵌入Java-AWT-panel → 再嵌入Swing-JPanel?

备注:内容来源于stack exchange,提问作者dragoness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:04:28