【问题标题】:JavaFX bundle exe not showing TableView contentsJavaFX bundle exe 不显示 TableView 内容
【发布时间】:2012-12-30 14:49:17
【问题描述】:

我们创建了一个 JavaFX 应用程序,其中包含许多 TableView 来显示数据。 我们使用 Ant 构建了原生包,并且我们使用 Proguard-4.8 对 jar 进行了混淆处理,我们能够使用该混淆创建原生包 exe jar 成功。当我们运行 exe 时,它​​成功启动了应用程序,一切正常,tableView 中存在数据,但我们无法在 TableView 中看到数据。下面附上从 exe 为 TableView 截取的屏幕截图 -

注意:我们可以使用未经混淆创建的 jar 和 exe 在 TableView 中查看数据。

在 build.xml 中混淆 jar 的步骤

<target name="ObfuscatingProject" depends="apidocs">

            <taskdef resource="proguard/ant/task.properties" classpath="${WorkingFolder}/proguard.jar" />
            <proguard>
                -dontusemixedcaseclassnames
                -printmapping Project_Proguard.map
                -dontshrink
                -dontoptimize
                -dontskipnonpubliclibraryclasses
                -dontskipnonpubliclibraryclassmembers

                -libraryjars "${java.home}/lib/rt.jar"
                -libraryjars "${java.home}/lib/javaws.jar"
                -libraryjars "${env.JAVA_HOME}/lib/ant-javafx.jar"
                -libraryjars "${env.JAVA_HOME}/jre/lib/jfxrt.jar"           
                -libraryjars ${WorkingFolder}/libs/BareBonesBrowserLaunch.jar
                -libraryjars ${WorkingFolder}/libs/activation.jar
                -libraryjars ${WorkingFolder}/libs/log4j-1.2.16.jar
                -libraryjars ${WorkingFolder}/libs/commons-codec-1.5.jar
                -libraryjars ${WorkingFolder}/libs/commons-httpclient-3.1.jar
                -libraryjars ${WorkingFolder}/libs/commons-logging-1.1.1.jar
                -libraryjars ${WorkingFolder}/libs/commons-io-2.0.1.jar
                -libraryjars ${WorkingFolder}/libs/xercesImpl-2.9.1.jar
                -libraryjars ${WorkingFolder}/libs/javax.mail.jar
                -libraryjars ${WorkingFolder}/libs/balloontip-1.2.1.jar
                -libraryjars ${WorkingFolder}/libs/httpclient-4.1.1.jar
                -libraryjars ${WorkingFolder}/libs/httpcore-4.1.3.jar
                -libraryjars ${WorkingFolder}/libs/jcifs-1.3.16.jar         
                -libraryjars ${WorkingFolder}/libs/proguard-4.8.jar
                -libraryjars ${WorkingFolder}/libs/xml-apis-1.3.04.jar
                -libraryjars ${WorkingFolder}/libs/swingx-1.6.jar
                -libraryjars ${WorkingFolder}/libs/derby.jar


                -injars ${WorkingFolder}/${app.name}.jar
                -injars ${WorkingFolder}/CustomJars/LicVerifier.jar(!META-INF/MANIFEST.MF)
                -injars ${WorkingFolder}/CustomJars/LicUtility.jar(!META-INF/MANIFEST.MF)


                -outjars ${WorkingFolder}/ObfuscatedProjectJar/ProjectObfuscated.jar

                -ignorewarnings

                -keepattributes 

                Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
                -adaptresourcefilecontents **.fxml,**.properties,META-INF/MANIFEST.MF,images/*.jar,Project.version

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

                -keepclassmembernames class com.javafx.main.Main {
                    public static void main(java.lang.String[]);
                } 


                -keep class com.javafx.main.*

                -keepclasseswithmembers public class com.javafx.main.Main{
                    public static void main(java.lang.String[]);
                }

                -keepclasseswithmembers public class com.project.main.ProjectEntryFX{
                    public static void main(java.lang.String[]);
                 }

                -keepclasseswithmembers public class net.project.license.LicEntryPoint{
                     public *;
                 }


                -keep class * extends org.xml.sax.helpers.DefaultHandler

                -keepclassmembers class * extends org.xml.sax.helpers.DefaultHandler {
                    private *;
                        public *;
                }

            </proguard>
    </target> 

有人可以建议我在 JavaFX TableView 中查看数据需要改进什么吗?

感谢您的帮助!

【问题讨论】:

    标签: java tableview javafx native proguard


    【解决方案1】:

    考虑到它们的名称,javaFx 必须访问类的某些方法。

    例如:如果您有一个 Person 类,其属性名称为 surName,...您可能会这样写:

    public Class Person {
    
    private StringProperty name, surname,....
    
    public StringProperty nameProperty() {
            return name;
        }
    
    public StringProperty surnameProperty() {
            return surname;
    }
    
    ...
    
    }
    

    nameProperty、surnNameProperty 等方法可能会在您的应用程序中通过如下代码访问:

    new PropertyValueFactory<Person, String>("name")
    new PropertyValueFactory<Person, String>("surName")
    

    混淆器不得重命名此类方法(nameProperty、surnameProperty...)。你可以用这样的配置来说明这一点:

    -keepclassmembers public class yourpackage.** {
        public javafx.beans.property.StringProperty *Property();
    }
    

    【讨论】:

    • 天才!终于修好了。
    • 如果我的班级是Blackout,并且在包模型中,我应该写model.Blackout?我应该在哪里添加该配置?
    猜你喜欢
    • 2016-09-02
    • 2015-12-15
    • 1970-01-01
    • 2018-11-13
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2013-05-20
    相关资源
    最近更新 更多