5

データを表示するための多数のTableViewを含む 1 つの JavaFX アプリケーションを作成しました。Antを使用してネイティブ バンドルを構築し、 Proguard-4.8でjar を難読 化しており、その難読化された jar を使用してネイティブ バンドル exe を正常に作成できます。exe を実行すると、アプリケーションが正常に起動されます。すべて正常に動作しています。データは tableView に存在しますが、TableView でデータを表示できません。TableViewのexeから取得したスクリーンショットの下に添付されています-

注 : 難読化せずに作成された 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 でデータを表示するために改善すべき点を教えてもらえますか?

手伝ってくれてありがとう!!

4

1 に答える 1

5

javaFx は、名前を考慮してクラスのいくつかのメソッドにアクセスする必要があります。

例: 属性名 surName を持つクラス Person がある場合、おそらく次のように記述します。

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();
}
于 2013-10-23T10:48:12.793 に答える