我浏览了每个博客/论坛,但无法解决此问题。一个简单的项目,在按钮上单击以声明testNG实例并运行它。当项目在Eclipse中运行时,此方法有效。但是在将项目导出为Jar文件并运行该jar文件后,它卡在了TestNG实例初始化中。
我在eclipse中创建了一个Javafx项目。
Main.java:
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root= FXMLLoader.load(getClass().getResource("home.fxml"));
primaryStage.setTitle("Hello");
primaryStage.setScene(new Scene(root, 800, 500));
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
按钮和FXML中的textArea。为了调试正在发生的事情,我将System.out.print映射到textArea。从eclipse运行时,它可以按预期打印所有内容,但以jar文件运行时,它仅显示“正在创建”,我必须通过任务管理器终止进程“ javaw.exe”
controller.java
public class controller implements Initializable {
@FXML
private Button testBtn;
@FXML
private TextArea statusArea;
@FXML
public void buttonClicked() {
try {
System.out.println("creating");
TestNG testNG = new TestNG();
System.out.println("DONE creating");
ArrayList<String> suites = new ArrayList<>();
suites.add("testng.xml");
testNG.setTestSuites(suites);
testNG.run();
System.out.println("Running");
}catch (Exception e) {
System.out.println("EXCEPTION: "+e.getMessage());
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
appendText(String.valueOf((char) b));
}
};
System.setOut(new PrintStream(out, true));
}
public void appendText(String str) {
Platform.runLater(() -> statusArea.appendText(str));
}
}
使用的库:
testng-6.14.3:http://central.maven.org/maven2/org/testng/testng/6.14.3/testng-6.14.3.jar
jcommander-1.48:http://central.maven.org/maven2/com/beust/jcommander/1.48/jcommander-1.48.jar
从Eclipse运行时的屏幕截图:
作为JAR文件运行时的屏幕截图