当前位置: 首页 > 知识库问答 >
问题:

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

楚皓君
2023-03-14

我做了一个简单的JavaFX程序,我似乎无法用ProGuard混淆它。

我关注了这个问题:混淆JavaFX应用程序

这是我的代码:

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

根据另一个问题:错误:在类Calculate中未找到main方法,请将Main方法定义为:public static void Main(String[]args)我需要我的类有一个带主体的< code>main方法。显然我已经得到了,正如你从我上面的代码中看到的。

那么我做错了什么?我用的是Java 8。

共有1个答案

闻人宏盛
2023-03-14

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

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

-keepclasseswithmembers public class com.javafx.main.Main, org.eclipse.jdt.internal.jarinjarloader.*, HelloWorld {
    public static void main(java.lang.String[]);
}
 类似资料:
  • 问题内容: 我试图混淆我的JavaFX应用程序,但失败了。生成的结果不起作用,我不明白为什么。最终的jar失败了,因为fxml文件无法再加载所有导入(ClassNotFoundException)。 部署工作流程: 生成可运行的jar(在IntelliJ知识中作为工件) 用ProGuard混淆那个罐子 修复ProGuard无法执行的那个jar中的一些问题 1)最小示例应用 示例应用程序“ Guar

  • 我试图混淆我的JavaFX应用程序,但它失败了。生成的结果不工作,我不明白为什么。由于fxml文件无法加载所有导入(ClassNotFoundException),因此生成的jar会失败。 null null 现在结构看起来是这样的: sample.fxml文件现在如下所示: 现在这个罐子应该真的又能工作了,因为一切又正常了。但事实并非如此!fxml加载程序无法加载CustomControl(现在

  • 我无法在我的应用程序中使用proguard。当我将minify启用为true时,布局屏幕中的textinputlayout工作正常,但我有一个alertdialog,其中包含一个膨胀的XML,该XML没有膨胀(该XML包含一个textinputlayout。请帮助大家。这是代码片段。 PS:我正在使用手机应用程序发帖,请不要抨击对齐不当。我真的需要帮助。 建筑渐变条目-- XML屏幕中的TextI

  • 我正在eclipse中学习selenium,但出现了以下错误- 错误:在类驱动程序中找不到主方法,请定义主方法为:公共静态无效主(String[]args)或JavaFX应用程序类必须扩展javafx.application.应用程序 我已经在buildpath中添加了SeleniumJAR和SeleniumStandaloneJAR文件,但错误仍然存在,下面是代码 我找遍了,但没能找到解决办法,

  • 我明白了,我必须提到Proguard属性文件中的外部库。我该怎么提才是问题所在。 请查看我的proguard文件

  • 自从我将IntelliJ升级到Ultimate 2019.2之后,我突然开始出现以下问题: null 我是通过单击主函数上的play按钮来运行这个。我不得不将目录注释为sources目录和test sources。我重新进口了我的Gradle.Build。我试着重建项目,但它也找不到我的源项目中的项目。 我还尝试使缓存无效并重新启动。没有变化。 我想不出还有什么可以尝试的。

  • 我有一个gradle项目。在那里,我尝试启动一个Eureka服务器。以下是我的设置: //compileOnly('org.springframework.cloud:spring cloud starter netflix eureka server:')] 通过这种方式,我尝试启动应用程序: @EnableEurekaServer公共类EurekaServer{ } 但不幸的是,报告出现了一些

  • 问题内容: 我在使用简单的hello world程序时遇到了麻烦!我希望有人能对此有所启发。 因此,我收到的错误如下: 因此,通过错误,我可以看到它 显然 缺少main,但是它在那里: 如果有帮助,我就在Mac OS / X上。 问题答案: 问题在于您的方法没有采用String数组作为参数。请使用以下签名: 要么 其他有效选项是: 在Java语言规范中,这被告知如下: 方法main必须声明为pub