java - 是否有等同于 "java.awt.headless=true"的 SWT?

标签 java swt headless

我试图在 headless (headless)环境中运行 Java SWT GUI 应用程序,并问自己是否有 equivalent to the AWT选项 -Djava.awt.headless=true?

如果没有,我会选择 XvfbXvnc,反正我很好奇。

最佳答案

根据这个非常古老的 bug report SWT headless (headless)模式存在一些问题。但同样它非常古老并且针对 Mac OS 进行了处理。

问答

Asked myself if there is an equivalent to the AWT option "-Djava.awt.headless=true"?

没有这样的属性。尽管在 Win7 和 eclipse 4.2 上,您可以在 headless (headless)模式下操作(只是不要执行 shell.open())。

代码

下面的代码打开一个浏览器实例,等待它的加载事件,一旦页面被加载,它就会转储它的页面内容并关闭 shell。此外,它还会在这种 headless (headless)模式下创建颜色和图像。

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class HeadLess 
{
    public static void main(String[] args) {
        new HeadLess().start();
    }

    public void start()
    {
        Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(1, true));
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        shell.setLayoutData(gridData);

        // Create browser and listen for events in headless mode
        final Browser browser = new Browser(shell, SWT.NONE);
        gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        browser.setLayoutData(gridData);

        browser.setUrl("https://stackoverflow.com/questions/12193231/is-there-an-equivalent-to-java-awt-headless-true-for-swt");
        browser.addProgressListener(new ProgressListener() {
            public void completed(ProgressEvent event) {
                System.out.println(browser.getText());
                shell.close();
            }
            public void changed(ProgressEvent event) {
            }
        });

        browser.addLocationListener(new LocationListener() {
            public void changing(LocationEvent event) {
                System.out.println(event.location);
            }
            public void changed(LocationEvent event) {
            }
        });

        // Creating image in headless mode !!
        Color red = new Color(display, new RGB(255, 0, 0));
        Image image = new Image(display, 100, 100);
        GC gc = new GC(image);
        gc.setBackground(red);
        gc.fillRectangle(image.getBounds());
        gc.dispose();

        ImageLoader loader = new ImageLoader();
        loader.data = new ImageData[] {image.getImageData()};
        loader.save("swt.png", SWT.IMAGE_PNG);

        red.dispose();
        image.dispose();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }

        display.dispose();
    }
}

附加

  1. swt browser in headless mode
  2. Easiest way to unit test SWT and Swing apps in a headless environment?

关于java - 是否有等同于 "java.awt.headless=true"的 SWT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12193231/

相关文章:

service - 命中 HeadlessService 的端点 - Kubernetes

google-chrome - 为什么 Chromium headless 在我告诉它时不转储 DOM?

java - 更改 SWT 中嵌套复合 Material 顶边之间的间距

java - 工作流内容处理

java - 检查一个字符串是否是另一个字符串的子字符串

java - 使用 Gson for ReSTLet 将 Post 数据(Representation)转换为 Object

java - SWT中如何将组合体划分为不同的空间

java - 从 TableItem 中检索小部件

Watir PhantomJS 驱动程序可选参数用于忽略 SSL 错误?

java - 向 EnumSet 添加类型参数总是给我 "Bound mismatch"