SWT在不同的系统上

时间:2016-10-03 12:57:29

标签: java maven swt

我使用了Java和SWT' Browser。我准备了两个系统版本的应用程序,首先是针对Windows的OSX第二版。

两个系统都是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>

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

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

在OS X系统上它运行良好。

但是当我尝试使用Windows时,点击按钮后旧页面不会改变。我检查了日志和消息&#34;打开新页面!&#34;写了但没有任何反应(新页面不像OS X那样加载)。我可以通过WebKit和browser.refresh()刷新浏览器在加载页面之后刷新,但是有旧的内容(不像OS X中那样是新的)。

我调试并检查了来自SWT库的WebKit event.browser = browser;之后发生的事情。

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

1 个答案:

答案 0 :(得分:1)

<强>分辨

问题出在图书馆。在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();
            }
        });