Java-运行未安装SWT的SWT依赖程序

时间:2019-07-02 12:57:37

标签: java eclipse swt

我有一个Java程序,其中包含org.eclipse.swt个库,例如“ Display”和“ Shell”

该程序要做的第一件事是:

private void authenticationFlow() {
    Display display = new Display();

    Shell shell = new Shell(display);
    final Browser browser;
    //some other code here
}

我将此程序导出到可运行的jar文件,并且可以在我的PC上正常运行。

但是,当尝试在未安装eclipse的PC上运行它时,程序无法启动。没有例外。它只是退出而不会运行其余代码。

我试图通过创建一堆这样的警报框来进行调试:

private void authenticationFlow() {
    popAlertBox(AlertType.INFORMATION, "Nice", "Something happened", "Starting auth");
    Display display = null;
    try {
        display = new Display();
    } catch (Exception e) {
        popAlertBox(AlertType.ERROR, "Oh oh", "Something went wrong", e.getMessage());
    }
    popAlertBox(AlertType.INFORMATION, "Nice", "Something happened", "created display");
    Shell shell = new Shell(display);
    popAlertBox(AlertType.INFORMATION, "Nice", "Something happened", "created shell");
    final Browser browser;
    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns = 3;
    try {
        shell.setLayout(gridLayout);
    } catch (Exception e) {
        popAlertBox(AlertType.ERROR, "Shell error", "Could not instantiate Shell: ", e.getMessage());
    }
    //rest of code

private void popAlertBox(AlertType type, String title, String header, String contentText) {
    Alert alert = new Alert(type);
    alert.setTitle(title);
    alert.setHeaderText(header);
    alert.setContentText(contentText);
    alert.setX(GUIMain.getStageX() + GUIMain.getWidth()*0.4);
    alert.setY(GUIMain.getStageY()+ GUIMain.getHeight()*0.4);
    alert.showAndWait();
}

我最终看到“ Starting auth” AlertBox,就是这样,程序立即退出。 我从未到达“创建的显示”警报框。

所以我认为这与SWT本身有关。

现在我的问题是

1. Is this really directly related to SWT or am I misunderstanding something.
2. If it is, how can I have this program run on a PC without eclipse installed?

编辑:

我将maven用于所有依赖项 这是我的图书馆的图片,包括swt enter image description here

我尝试围绕我的方法进行尝试,该方法在try catch中被调用,如下所示:

        try{
            authenticationFlow();
        }catch (Exception e) {
            popAlertBox(AlertType.ERROR, "oh oh", "Something went wrong", e.getMessage());
        }
        popAlertBox(AlertType.INFORMATION, "Nice", "Something happened", "If you see this then something is in fact happening. final popup");

,这两个弹出窗口均不显示。不在捕获块中的一个,也没有在捕获块中的一个。

我在pom.xml中添加了以下依赖项:

    <dependency>
        <groupId>org.eclipse</groupId>
        <artifactId>swt</artifactId>
        <version>3.3.0-v3346</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
        <version>4.3</version>
    </dependency>

它仍未在未安装eclipse的PC上运行

1 个答案:

答案 0 :(得分:0)

如果要运行一个设计为用SWT编写ui的程序,最好的方法是在应用程序的类路径中提供SWT库。这并不意味着您必须提供整个月食。 Eclipse也只是将SWT用作ui的库。 只需抓住SWT罐子并将它们放到类路径中,程序就应该开始向您显示一个在Shell shell = new Shell(display)行中表示的窗口。

使用Maven添加SWT:

<properties>
  <swt.version>4.3</swt.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
        <version>${swt.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
        <version>${swt.version}</version>
        <!-- To use the debug jar, add this -->
        <classifier>debug</classifier>
    </dependency>       
    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.gtk.linux.x86</artifactId>
        <version>${swt.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
        <version>${swt.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
        <version>${swt.version}</version>
    </dependency>
</dependencies>

这将为每个平台添加SWT。您也可以只添加需要构建的版本。

将应用程序构建到“胖子”中时,请确保提供了所有依赖项。