我有一个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
我尝试围绕我的方法进行尝试,该方法在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上运行
答案 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。您也可以只添加需要构建的版本。
将应用程序构建到“胖子”中时,请确保提供了所有依赖项。