【问题标题】:Running my app returns me : Javafx.fxml.LoadExeption运行我的应用程序返回我:Javafx.fxml.LoadExeption
【发布时间】:2015-11-27 15:23:56
【问题描述】:

我的应用有问题。我正在尝试制作一个可以在命令提示符下完美运行的应用程序,但具有良好的界面以获得更好的用户体验。为此,我选择了对我来说看起来比摇摆更好的 Javafx。
但它不起作用。我不明白出了什么问题。 这是我的主要应用程序代码:

package ch.makery.adress;

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.Parent;


public class MainApp extends Application {



    @Override
    public void start(Stage stage) throws Exception {
        Parent parent = FXMLLoader.load(getClass().getResource("PersonOverview.fxml"));
        Scene scene = new Scene(parent);
        stage.setTitle("Appication Extraction et remplissage Excel");
        stage.setScene(scene);
        stage.show();


}
}

我的六角控制器:

package ch.makery.adress;

import java.awt.FileDialog;
import java.awt.List;
import java.io.File;
import java.io.IOException;
import javafx.fxml.Initializable;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ResourceBundle;
import javax.swing.JFrame;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.Number;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class HexaController implements Initializable {
    static org.jdom2.Document document;
    static JFrame fileDialog;
    static Element racine;
    static String Nom_dar;
    static java.util.List<Element> listeDAS;
    static ArrayList <String> Nom_das=new ArrayList();
    static ArrayList <String> Nom_task=new ArrayList();
    static ArrayList <String> Nom_Variable1=new ArrayList();
    static ArrayList <String> Resultat_Variable1=new ArrayList();
    static ArrayList <Double> Resultat_Variabledouble1=new ArrayList<Double>();
    static ArrayList <String> ResultatHexa_Variable1=new ArrayList<String>();
    static ArrayList <String> Lien=new ArrayList();
    static java.util.List<Element> ListeTRIAL;
    static java.util.List<Element> listeTASK;
    static java.util.List<Element> listeOperation;
    static List listeOperation_delta;
    static java.util.List<Element> listeArgument;
    static List listeArgument_delta;

        @FXML
        private ComboBox<String> hexa;
        ObservableList<String> list = FXCollections.observableArrayList();
        @FXML
        private TextField entree;

        @FXML
        private TextField nomfichier;

        @FXML
        private static TextField excel;

        @FXML
        private static TextField sortie;


        @FXML
        private void dar(ActionEvent event){
            FileDialog fd1=new FileDialog(fileDialog,"Choisissez un fichier .dar",FileDialog.LOAD);
            fd1.setDirectory("C:\\");
            fd1.setVisible(true);
            String filename1=fd1.getFile();
            String Directory1=fd1.getDirectory();
            String path1=Directory1 + filename1;
            entree.setText(path1);
            nomfichier.setText(filename1);
        }

        @FXML
        private void modele(ActionEvent event){
            JFrame parentFrame=new JFrame();
             FileDialog filechooser = new FileDialog (parentFrame, "Choisir un modèle Excel à copier",FileDialog.LOAD);
             filechooser.setDirectory("C:\\");
             filechooser.setVisible(true);
             String directory_copy = filechooser.getDirectory();
             String name_copy= filechooser.getFile();
             String path_copy = (directory_copy+name_copy);
             excel.setText(path_copy);
        }

        @FXML
        private void sortie (ActionEvent event){
            JFrame parentFrame2=new JFrame();
             FileDialog filechooser2 = new FileDialog (parentFrame2, "Choisir une destination d'enregistrement",FileDialog.SAVE);
             filechooser2.setDirectory("C:\\");
             filechooser2.setVisible(true);
             String directory_save = filechooser2.getDirectory();
             String name_save= filechooser2.getFile();
             String path_save = (directory_save+name_save+".xls");
             sortie.setText(path_save);
        }
        @FXML
        private void annuler (ActionEvent event){
            System.exit(0);
        }


        @FXML
        private static ComboBox<Integer>methode;
        ObservableList<Integer>nombre = FXCollections.observableArrayList();

        @FXML
        private void exe (ActionEvent event) throws Throwable{
            SAXBuilder sxb = new SAXBuilder();
            String filename1=nomfichier.getText();
            if(filename1==null)
            {
                    System.out.println("Annulation");
                    System.exit(0);
            }
            else
            {
                try
                {
                    //On crée un nouveau document JDOM avec en argument le fichier XML
                    //Le parsing est terminé 
                    String path1=entree.getText();
                    document = sxb.build(new File(path1));
                    //On initialise un nouvel élément racine avec l'élément racine du document.
                    racine = document.getRootElement();
                    System.out.println("Lecture du premier .dar");
                }
                catch(Exception e)
                {
                    System.out.println("FATAL ERROR !");
                    System.exit(0);
                }
            }
            afficheALL();

            Xl();
        }


    //RECUPERATION DES DONNEES DU FICHIER DAR

        static void afficheALL()
        {
            //Variables Locales
            String Str;
            String Str_bis;
            Nom_dar=racine.getAttributeValue("label");

            System.out.println("Nom du fichier dar : " + Nom_dar+"\n");

            listeDAS= racine.getChildren("DAS");
            //On crée un Iterator sur notre liste
            Iterator<Element> i1 = listeDAS.iterator();

            ////TRAITEMENT POUR CHAQUE DAS
            String m[] = new String[50];
                m[0]="Marqueur de Sortie";
                m[1]="Nb Occurences";
                m[2]="Valeur Physique";
                m[3]="Résultat";
                m[4]="Valeur de Sortie";




                int s = methode.getValue();
                int n;
                for(n=5;n<5+s;n++)
                {

                    //System.out.println("Entrez le nom de la methode");
                    //Scanner methode = new Scanner(System.in);
                    //String name=methode.nextLine();
                    //m[n]=name;
                }
                int j;
                for(j=0;j<5+s;j++)
                {
                    System.out.println("Le nom de la methode "+j+" est :"+m[j]);
                }
            while(i1.hasNext())
            {
               Element courant = (Element)i1.next();
               //On affiche le nom de l’élément courant
               Str=courant.getAttributeValue("dasFullFileName").toString();
               System.out.println("Nom du DAS: " + Str);
               Nom_das.add(Str);

               ListeTRIAL=courant.getChildren("TRIAL");
               @SuppressWarnings("rawtypes")
            Iterator T1=ListeTRIAL.iterator();

               while(T1.hasNext())
               {
                 Element courant2 =(Element)T1.next();
                 Lien.add(courant2.getAttributeValue("xconvFullFileName").toString());
               }

               listeTASK=courant.getChildren("TASK");
               @SuppressWarnings("rawtypes")
            Iterator k1=listeTASK.iterator();


               while(k1.hasNext())
               {
                   Element courant2 =(Element)k1.next();
                   Str_bis=courant2.getAttributeValue("label").toString();
                   System.out.println(Str_bis);

                       listeOperation=courant2.getChildren("Operation");
                       @SuppressWarnings("rawtypes")
                    Iterator l1=listeOperation.iterator();

                        while(l1.hasNext())
                        {
                            Element courant3=(Element)l1.next();
                            listeArgument=courant3.getChildren("Argument");
                            @SuppressWarnings("rawtypes")
                            Iterator m1=listeArgument.iterator();

                            while(m1.hasNext())
                            {

                                Element courant4=(Element)m1.next();
                                int l;

                                for(l=0;l<5+s;l++)
                                {
                                    if(courant4.getAttributeValue("parameterName").compareTo(m[l])==0)
                                    {
                                        Nom_Variable1.add(courant4.getAttributeValue("argumentName"));
                                        double d = Double.parseDouble(courant4.getAttributeValue("instantValue"));
                                        DecimalFormat df = new DecimalFormat(".#");
                                        df.setMaximumFractionDigits(20);
                                        String sortie = df.format(d);
                                        long entier = (long)d;
                                        String hex = Long.toHexString(entier).toUpperCase();
                                        //hex.toUpperCase();
                                        Resultat_Variable1.add(sortie);
                                        Resultat_Variabledouble1.add(d);
                                        ResultatHexa_Variable1.add(hex);

                                    }
                                }
                            }
                        }
                    }
                    System.out.println("Fin lecture XML File");
               }
            }
        static void Xl() throws Throwable
         {

             try
             {

                 System.out.println("Saisi utilisateur ok");

        //CREATION DES FEUILLES NECESSAIRES A LA RECUPERATION DES DONNEES
                 String path_copy = excel.getText();
                 String path_save = sortie.getText();
                 Workbook copie = Workbook.getWorkbook(new File(path_copy));
                 WritableWorkbook sortie = Workbook.createWorkbook(new File(path_save),copie);
                 WritableFont bord=new WritableFont(WritableFont.ARIAL,11);
                 WritableCellFormat border=new WritableCellFormat(bord);


        //REMPLISSAGE DE LA PREMIERE FEUILLE AVEC LES DONNEES MESUREES
                 System.out.println("---"+Nom_Variable1.size()+"---");
                 for(int x=0;x<=Nom_Variable1.size()-1;x++)
                 {
                     Label Col0= new Label(0,x,Nom_Variable1.get(x),border);
                     sortie.getSheet(1).addCell(Col0);
                 }

                 for(int y=0;y<=Resultat_Variabledouble1.size()-1;y++)
                 {
                     Number Col1= new Number(1,y,Resultat_Variabledouble1.get(y),border);
                     sortie.getSheet(1).addCell((WritableCell) Col1);
                 }

                 for(int y=0;y<=ResultatHexa_Variable1.size()-1;y++)
                 {
                     Label Col2= new Label(2,y,ResultatHexa_Variable1.get(y),border);
                     sortie.getSheet(1).addCell(Col2);
                 }

                 System.out.println("Fin Copie Excel");
                 sortie.write();
                 sortie.close();

             }
             catch (RowsExceededException e1)
             {
             }
             catch(BiffException ex)
             {
             }
             catch (WriteException e1)
             {
             }
             catch (IOException e)
             {
             }
             finally
             {
                 System.out.println("Le fichier à été généré correctement.");
                 System.out.println ("Appuyez sur 'Entrée' pour terminer le programme");
                 System.exit(0);
            }

            System.exit(0);
         }

public HexaController(){

}

public void initialize(URL url,ResourceBundle rb){

    list.add(new String("OUI"));
    list.add(new String("NON"));
    hexa.setItems(list);
    nombre.add(new Integer(0));
    nombre.add(new Integer(1));
    nombre.add(new Integer(2));
    nombre.add(new Integer(3));
    nombre.add(new Integer(4));
    nombre.add(new Integer(5));
    methode.setItems(nombre);
}
}

还有我的 fxml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.effect.*?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="350.0" prefWidth="720.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.makery.adress.HexaController">
   <children>
      <GridPane layoutX="-120.0" layoutY="-234.0" prefHeight="0.0" prefWidth="80.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
        </columnConstraints>
        <rowConstraints>
            <RowConstraints maxHeight="132.0" minHeight="10.0" prefHeight="64.0" vgrow="SOMETIMES" />
            <RowConstraints maxHeight="270.0" minHeight="0.0" prefHeight="52.0" vgrow="SOMETIMES" />
            <RowConstraints maxHeight="546.0" minHeight="10.0" prefHeight="61.0" vgrow="SOMETIMES" />
          <RowConstraints maxHeight="589.0" minHeight="10.0" prefHeight="76.0" vgrow="SOMETIMES" />
          <RowConstraints maxHeight="620.0" minHeight="10.0" prefHeight="63.0" vgrow="SOMETIMES" />
            <RowConstraints maxHeight="641.0" minHeight="10.0" prefHeight="47.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <children>
            <Button mnemonicParsing="false" onAction="#dar" text="Parcourir" textAlignment="CENTER" GridPane.columnIndex="6" GridPane.halignment="CENTER" />
            <Button mnemonicParsing="false" onAction="#modele" text="Parcourir" textAlignment="CENTER" GridPane.columnIndex="6" GridPane.halignment="CENTER" GridPane.rowIndex="1" />
            <Button mnemonicParsing="false" onAction="#sortie" text="Enregistrer" textAlignment="CENTER" GridPane.columnIndex="6" GridPane.halignment="CENTER" GridPane.rowIndex="2" />
            <Button mnemonicParsing="false" onAction="#exe" text="Executer" GridPane.columnIndex="5" GridPane.halignment="CENTER" GridPane.rowIndex="5">
               <font>
                  <Font name="System Bold" size="12.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#annuler" text="Annuler" GridPane.columnIndex="6" GridPane.halignment="CENTER" GridPane.rowIndex="5">
               <font>
                  <Font name="System Bold" size="12.0" />
               </font>
            </Button>
            <Label text="Choisissez un fichier &quot;.dar&quot;" GridPane.columnSpan="2" GridPane.halignment="LEFT">
               <GridPane.margin>
                  <Insets left="20.0" />
               </GridPane.margin>
            </Label>
            <Label text="Choisissez un modèle format &quot;.xls&quot;" GridPane.columnSpan="2" GridPane.halignment="LEFT" GridPane.rowIndex="1">
               <GridPane.margin>
                  <Insets left="20.0" />
               </GridPane.margin>
            </Label>
            <Label prefHeight="17.0" prefWidth="278.0" text="Choisissez la destination et le nom d'enregistrement" GridPane.columnSpan="3" GridPane.halignment="LEFT" GridPane.rowIndex="2">
               <GridPane.margin>
                  <Insets left="20.0" />
               </GridPane.margin>
            </Label>
            <Label text="Nombre de méthodes à ajouter" GridPane.columnSpan="2" GridPane.rowIndex="3">
               <padding>
                  <Insets left="20.0" />
               </padding>
            </Label>
            <Label text="Conversion hexadecimale" GridPane.columnSpan="2" GridPane.rowIndex="4">
               <padding>
                  <Insets left="20.0" />
               </padding>
            </Label>
            <TextField fx:id="entree" GridPane.columnIndex="3" GridPane.columnSpan="3" />
            <TextField fx:id="excel" GridPane.columnIndex="3" GridPane.columnSpan="3" GridPane.rowIndex="1" />
            <TextField fx:id="sortie" GridPane.columnIndex="3" GridPane.columnSpan="3" GridPane.rowIndex="2" />
            <ComboBox fx:id="methode" prefWidth="150.0" promptText="Choisir" GridPane.columnIndex="2" GridPane.rowIndex="3" />
            <ComboBox fx:id="hexa" prefWidth="150.0" promptText="Choisir" GridPane.columnIndex="2" GridPane.rowIndex="4" />
         </children>
      </GridPane>
   </children>
</AnchorPane>

当我运行这个时,我有这个错误:

Exception in Application start method
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException: 
/C:/workspace/Application_traitement/bin/ch/makery/adress/PersonOverview.fxml

    at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at ch.makery.adress.MainApp.start(MainApp.java:16)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$174(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(Unknown Source)
    ... 1 more
Caused by: java.lang.NullPointerException
    at ch.makery.adress.HexaController.initialize(HexaController.java:338)
    ... 18 more

你能帮我吗?
谢谢

【问题讨论】:

    标签: java javafx fxml scenebuilder


    【解决方案1】:

    您在 initialize() 方法中得到一个 NullPointerException。那是因为你的 ComboBox 方法被声明为静态的。

    FXML 注入不适用于 JavaFX8 中的静态变量。

    参考 James_D 对此问题的回答:

    javafx 8 compatibility issues - FXML static fields

    public class HexaController implements Initializable {
    
        private org.jdom2.Document document;
    
        private JFrame fileDialog;
        private Element racine;
        private String Nom_dar;
        private java.util.List<Element> listeDAS;
        private ArrayList<String> Nom_das = new ArrayList();
        private ArrayList<String> Nom_task = new ArrayList();
        private ArrayList<String> Nom_Variable1 = new ArrayList();
        private ArrayList<String> Resultat_Variable1 = new ArrayList();
        private ArrayList<Double> Resultat_Variabledouble1 = new ArrayList<Double>();
        private ArrayList<String> ResultatHexa_Variable1 = new ArrayList<String>();
        private ArrayList<String> Lien = new ArrayList();
        private java.util.List<Element> ListeTRIAL;
        private java.util.List<Element> listeTASK;
        private java.util.List<Element> listeOperation;
        private List listeOperation_delta;
        private java.util.List<Element> listeArgument;
        private List listeArgument_delta;
    
        @FXML
        private ComboBox<String> hexa;
        ObservableList<String> list = FXCollections.observableArrayList();
        @FXML
        private TextField entree;
    
        @FXML
        private TextField nomfichier;
    
        @FXML
        private TextField excel;
    
        @FXML
        private TextField sortie;
    
        @FXML
        private void dar(ActionEvent event) {
            FileDialog fd1 = new FileDialog(fileDialog, "Choisissez un fichier .dar", FileDialog.LOAD);
            fd1.setDirectory("C:\\");
            fd1.setVisible(true);
            String filename1 = fd1.getFile();
            String Directory1 = fd1.getDirectory();
            String path1 = Directory1 + filename1;
            entree.setText(path1);
            nomfichier.setText(filename1);
        }
    
        @FXML
        private void modele(ActionEvent event) {
            JFrame parentFrame = new JFrame();
            FileDialog filechooser = new FileDialog(parentFrame, "Choisir un modèle Excel à copier", FileDialog.LOAD);
            filechooser.setDirectory("C:\\");
            filechooser.setVisible(true);
            String directory_copy = filechooser.getDirectory();
            String name_copy = filechooser.getFile();
            String path_copy = (directory_copy + name_copy);
            excel.setText(path_copy);
        }
    
        @FXML
        private void sortie(ActionEvent event) {
            JFrame parentFrame2 = new JFrame();
            FileDialog filechooser2 = new FileDialog(parentFrame2, "Choisir une destination d'enregistrement", FileDialog.SAVE);
            filechooser2.setDirectory("C:\\");
            filechooser2.setVisible(true);
            String directory_save = filechooser2.getDirectory();
            String name_save = filechooser2.getFile();
            String path_save = (directory_save + name_save + ".xls");
            sortie.setText(path_save);
        }
    
        @FXML
        private void annuler(ActionEvent event) {
            System.exit(0);
        }
    
        @FXML
        private ComboBox<Integer> methode;
        ObservableList<Integer> nombre = FXCollections.observableArrayList();
    
        @FXML
        private void exe(ActionEvent event) throws Throwable {
            SAXBuilder sxb = new SAXBuilder();
            String filename1 = nomfichier.getText();
            if (filename1 == null) {
                System.out.println("Annulation");
                System.exit(0);
            } else {
                try {
                    //On crée un nouveau document JDOM avec en argument le fichier XML
                    //Le parsing est terminé 
                    String path1 = entree.getText();
                    document = sxb.build(new File(path1));
                    //On initialise un nouvel élément racine avec l'élément racine du document.
                    racine = document.getRootElement();
                    System.out.println("Lecture du premier .dar");
                } catch (Exception e) {
                    System.out.println("FATAL ERROR !");
                    System.exit(0);
                }
            }
            afficheALL();
    
            Xl();
        }
    
        //RECUPERATION DES DONNEES DU FICHIER DAR
        private void afficheALL() {
            //Variables Locales
            String Str;
            String Str_bis;
            Nom_dar = racine.getAttributeValue("label");
    
            System.out.println("Nom du fichier dar : " + Nom_dar + "\n");
    
            listeDAS = racine.getChildren("DAS");
            //On crée un Iterator sur notre liste
            Iterator<Element> i1 = listeDAS.iterator();
    
            ////TRAITEMENT POUR CHAQUE DAS
            String m[] = new String[50];
            m[0] = "Marqueur de Sortie";
            m[1] = "Nb Occurences";
            m[2] = "Valeur Physique";
            m[3] = "Résultat";
            m[4] = "Valeur de Sortie";
    
            int s = methode.getValue();
            int n;
            for (n = 5; n < 5 + s; n++) {
    
                //System.out.println("Entrez le nom de la methode");
                //Scanner methode = new Scanner(System.in);
                //String name=methode.nextLine();
                //m[n]=name;
            }
            int j;
            for (j = 0; j < 5 + s; j++) {
                System.out.println("Le nom de la methode " + j + " est :" + m[j]);
            }
            while (i1.hasNext()) {
                Element courant = (Element) i1.next();
                //On affiche le nom de l’élément courant
                Str = courant.getAttributeValue("dasFullFileName").toString();
                System.out.println("Nom du DAS: " + Str);
                Nom_das.add(Str);
    
                ListeTRIAL = courant.getChildren("TRIAL");
                @SuppressWarnings("rawtypes")
                Iterator T1 = ListeTRIAL.iterator();
    
                while (T1.hasNext()) {
                    Element courant2 = (Element) T1.next();
                    Lien.add(courant2.getAttributeValue("xconvFullFileName").toString());
                }
    
                listeTASK = courant.getChildren("TASK");
                @SuppressWarnings("rawtypes")
                Iterator k1 = listeTASK.iterator();
    
                while (k1.hasNext()) {
                    Element courant2 = (Element) k1.next();
                    Str_bis = courant2.getAttributeValue("label").toString();
                    System.out.println(Str_bis);
    
                    listeOperation = courant2.getChildren("Operation");
                    @SuppressWarnings("rawtypes")
                    Iterator l1 = listeOperation.iterator();
    
                    while (l1.hasNext()) {
                        Element courant3 = (Element) l1.next();
                        listeArgument = courant3.getChildren("Argument");
                        @SuppressWarnings("rawtypes")
                        Iterator m1 = listeArgument.iterator();
    
                        while (m1.hasNext()) {
    
                            Element courant4 = (Element) m1.next();
                            int l;
    
                            for (l = 0; l < 5 + s; l++) {
                                if (courant4.getAttributeValue("parameterName").compareTo(m[l]) == 0) {
                                    Nom_Variable1.add(courant4.getAttributeValue("argumentName"));
                                    double d = Double.parseDouble(courant4.getAttributeValue("instantValue"));
                                    DecimalFormat df = new DecimalFormat(".#");
                                    df.setMaximumFractionDigits(20);
                                    String sortie = df.format(d);
                                    long entier = (long) d;
                                    String hex = Long.toHexString(entier).toUpperCase();
                                    //hex.toUpperCase();
                                    Resultat_Variable1.add(sortie);
                                    Resultat_Variabledouble1.add(d);
                                    ResultatHexa_Variable1.add(hex);
    
                                }
                            }
                        }
                    }
                }
                System.out.println("Fin lecture XML File");
            }
        }
    
        private void Xl() throws Throwable {
    
            try {
    
                System.out.println("Saisi utilisateur ok");
    
                //CREATION DES FEUILLES NECESSAIRES A LA RECUPERATION DES DONNEES
                String path_copy = excel.getText();
                String path_save = sortie.getText();
                Workbook copie = Workbook.getWorkbook(new File(path_copy));
                WritableWorkbook sortie = Workbook.createWorkbook(new File(path_save), copie);
                WritableFont bord = new WritableFont(WritableFont.ARIAL, 11);
                WritableCellFormat border = new WritableCellFormat(bord);
    
                //REMPLISSAGE DE LA PREMIERE FEUILLE AVEC LES DONNEES MESUREES
                System.out.println("---" + Nom_Variable1.size() + "---");
                for (int x = 0; x <= Nom_Variable1.size() - 1; x++) {
                    Label Col0 = new Label(0, x, Nom_Variable1.get(x), border);
                    sortie.getSheet(1).addCell(Col0);
                }
    
                for (int y = 0; y <= Resultat_Variabledouble1.size() - 1; y++) {
                    Number Col1 = new Number(1, y, Resultat_Variabledouble1.get(y), border);
                    sortie.getSheet(1).addCell((WritableCell) Col1);
                }
    
                for (int y = 0; y <= ResultatHexa_Variable1.size() - 1; y++) {
                    Label Col2 = new Label(2, y, ResultatHexa_Variable1.get(y), border);
                    sortie.getSheet(1).addCell(Col2);
                }
    
                System.out.println("Fin Copie Excel");
                sortie.write();
                sortie.close();
    
            } catch (RowsExceededException e1) {
            } catch (BiffException ex) {
            } catch (WriteException e1) {
            } catch (IOException e) {
            } finally {
                System.out.println("Le fichier à été généré correctement.");
                System.out.println("Appuyez sur 'Entrée' pour terminer le programme");
                System.exit(0);
            }
    
            System.exit(0);
        }
    
        public HexaController() {
    
        }
    
        @Override
        public void initialize(URL url, ResourceBundle rb) {
    
            list.add(new String("OUI"));
            list.add(new String("NON"));
            hexa.setItems(list);
            nombre.add(new Integer(0));
            nombre.add(new Integer(1));
            nombre.add(new Integer(2));
            nombre.add(new Integer(3));
            nombre.add(new Integer(4));
            nombre.add(new Integer(5));
            methode.setItems(nombre);
        }
    
    }
    

    【讨论】:

    • 如果我删除静态声明,它会返回错误并且无法运行应用程序。如何将 TextField 和 Combobox 的值作为可以使用的变量?
    • 不,我无法编译它,出现错误提示无法对非静态字段进行静态引用
    • 您最好删除初始化方法之外的文本字段和组合框值设置。代码即将推出。
    • 删除 Textfield 是什么意思?因为我需要他们!我需要的是获取 Textfield 的内容并将其放入一个全局变量中,我可以将其用于一个事件,例如。
    • 你做错了,点,等一下,我会添加我的代码。你试图在它们尚未创建时访问它们,然后是 JavaFx跌倒
    【解决方案2】:

    在你的 MainApp 类中试试这个:

    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("PersonOverview.fxml"));
        Parent parent = (Parent)loader.load();
        Scene scene = new Scene(parent);
        stage.setTitle("Appication Extraction et remplissage Excel");
        stage.setScene(scene);
        stage.show();
        ((HexaController)loader.getController()).initForm();
    }
    

    然后在您的控制器中有一个名为 initForm() 的方法来执行此操作:

    public void initForm(){
        list.add(new String("OUI"));
        list.add(new String("NON"));
        hexa.setItems(list);
        nombre.add(new Integer(0));
        nombre.add(new Integer(1));
        nombre.add(new Integer(2));
        nombre.add(new Integer(3));
        nombre.add(new Integer(4));
        nombre.add(new Integer(5));
        methode.setItems(nombre);
    }
    

    同时删除控制器中的静态声明,它们不是必需的。您可以随意调用该方法,只要确保在调用 stage.show() 后使用该方法即可;

    【讨论】:

    • 我应该删除工具初始化吗?
    • JavaFX 不需要。您使用它还有其他原因吗?如果您只使用它来调用该初始化方法,则应该可以安全地删除它
    • 运行时没有给我带来错误。但是无论用 private 替换所有的 static 都可以正常工作。谢谢
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多