java - ProGuard 在我的 JavaFX 应用程序中找不到 main 方法

标签 java javafx proguard

我制作了一个简单的 JavaFX 程序,但我似乎无法使用 ProGuard 对其进行混淆。

我关注了这个问题:Obfuscating JavaFX application

这是我的代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {

    public static void main(String[] args) {
       launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane root = new AnchorPane();
        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}

根据该问题的答案,这应该是我的配置文件:

-injars /Users/me/Desktop/MyProgram.jar
-outjars /Users/me/Desktop/Obfuscated.jar

-libraryjars <java.home>/lib/rt.jar
-libraryjars <java.home>/lib/ext/jfxrt.jar

-dontshrink
-dontoptimize
-flattenpackagehierarchy ''
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
-adaptresourcefilecontents **.fxml,**.properties,META-INF/MANIFEST.MF

-keepclassmembernames class * {
    @javafx.fxml.FXML *;
}


# Keep - Applications. Keep all application classes, along with their 'main'
# methods.
-keepclasseswithmembers public class com.javafx.main.Main, HelloWorld {
    public static void main(java.lang.String[]);
}

但是在尝试运行 .JAR 程序时出现以下错误:

Error: Main method not found in class a.B, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

根据另一个问题:Error: Main method not found in class Calculate, please define the main method as: public static void main(String[] args) 我需要我的类有一个带有主体的 main 方法。显然我已经明白了,正如您从上面的代码中看到的那样。

那我做错了什么?我正在使用 Java 8。

最佳答案

似乎问题是因为您没有使用 MANIFEST.MF 来指定哪个是主类(我认为这是因为您通过 eclipse 导出器导出了 JAR)

您可以通过尝试在配置中添加此行来解决此问题。

-keepclasseswithmembers public class com.javafx.main.Main, org.eclipse.jdt.internal.jarinjarloader.*, HelloWorld {
    public static void main(java.lang.String[]);
}

关于java - ProGuard 在我的 JavaFX 应用程序中找不到 main 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751945/

相关文章:

java - Checkstyle 能否验证字符串值等于类或文件名?

annotations - 防止 Proguard 使用注释混淆子类

JavaFX 自定义 TextField 限制

Javafx Control EventHandler MouseClicked 所有 isxDown() 方法 false

在 IntelliJ Idea 中尝试使用混淆器登录时,将 android-support-v4.jar 添加到面临错误的 Android 应用程序

java - 如何使用 Blob 对象将大型原始 XML 文件写入 Oracle 数据库?

java - Gradle build for 2 platforms : JavaFX and Android. 如何?

java - 如何通过单击按钮获取 GPS 位置?

java - 安卓|正则表达式模式中的语法错误

java - 使用 "List"检索BigQuery的queryResult只得到512条记录