不同系统上的 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();
}
});
我用了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();
}
});