不同系统上的 SWT

SWT on different systems

我用了Java和SWT的Browser。我准备了两个系统版本的应用程序,第一个用于OSX,第二个用于Windows。

两个系统都是 64 位

SWT 需要针对不同系统的不同库,所以在 Maven 中我声明了两者

<profile>
    <id>windows-deploy</id>

    <dependencies>
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
            <version>4.6.1</version>
        </dependency>
    </dependencies>
</profile>

<profile>
    <id>osx-deploy</id>

    <dependencies>
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
            <version>4.6.1</version>
        </dependency>
    </dependencies>
</profile>

在浏览器中我加载页面并单击按钮(创建新的 window)但我不想打开新的 window,只重新加载实际的浏览器哪个新页面,我这样做就像下面的代码

browser.addOpenWindowListener(new OpenWindowListener() {
    public void open(WindowEvent event) {
        Log.debug(TAG + "<>", "Open new page!");
        event.browser = browser;
    }
 });

在 OS X 系统上效果很好。

但是当我尝试 Windows 时,点击按钮后旧页面没有改变。我检查了日志并写入了消息 "Open new page!" 但没有任何反应(新页面不像 OS X 那样加载)。我虽然这可能是关于 WebKit 加载页面后刷新和 browser.refresh() 刷新浏览器但是有旧内容(不像 OS X 中的新内容)。

我调试并检查了 event.browser = browser; SWT 库中的 WebKit 控制后发生的情况。

我应该怎么做才能在 Windows 上获得与在 OS X 上相同的效果?

已解决

问题出在库中。在 OSX 系统上,当我们更改 event.browser 对象时,会自动检测到它并且可以正常工作,但是在 Windows 系统上,我们需要添加到浏览器 VisibilityWindowListener 中,如下面的代码片段所示并且可以正常工作很好:)

browser.addVisibilityWindowListener(new VisibilityWindowListener() {
            public void hide(WindowEvent event) {
            }

            public void show(WindowEvent event) {
                Browser browser = (Browser) event.widget;
                Shell shell = browser.getShell();

                if (event.location != null)
                    shell.setLocation(event.location);

                if (event.size != null) {
                    Point size = event.size;
                    shell.setSize(shell.computeSize(size.x, size.y));
                }

                shell.open();
            }
        });