kostenloser Webspace werbefrei: lima-city


Fehlermeldung: "Unable to find application class name"

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Guten Abend,

    da ich nun bereits einige Erfahrung mit C# habe, wollte ich nun damit beginnen, mir Java genauer anzusehen, um auch plattformübergreifend arbeiten zu können.
    Ich habe mir also das aktuelle Java Development Kit samt Netbeans runtergeladen und mich gleich mal durch die Tutorials zu "Formen" gelesen.
    Konkret war ein kleines Applet für den Browser gedacht, allerdings habe ich bereits Probleme damit, die Anwendung zum Laufen zu bekommen, ohne groß etwas gemacht zu haben.

    Folgendes Scenario:

    New Project --> JavaFX --> JavaFX Application

    Projectname: Test
    Create Custom Preloader: Nein
    Use Dedicated Folder For Storing Libraries: Nein
    Create Application Class: Nein
    Set As Main Project: Ja


    Projekt wird erstellt.
    Danach Rechtsklick auf das leere Projekt --> New --> JFrame Form, Name (testframe) für die Klasse vergeben und Name (testpackage) des Packets vergeben.

    Ist die Form erstellt, gehe ich in den Designer und zieh einfach testhalber einen Button und ein TextArea rein, speichere das Ganze und möchte es danach kompilieren.
    Das kompilieren funktioniert....das starten des Programs via "Run" - Funktion in Netbeans funktioniert allerdings nicht.

    Ich erhalte folgende Meldung:
    Unable to find application class name


    Versuche ich, dass Program im Browser auszuführen, erhalte ich hingegen folgende Meldung:
    MissingFieldException[ Das folgende Pflichtfeld fehlt in der Startdatei: <jnlp><javafx-desc>main-class]


    Ich persönlich vermute, dass es daran liegen könnte, dass ich beim Erstellen des Projekt keinen Haken bei "Create Application Class" gesetzt habe....aber ich erstelle ja im Nachhinein sowieso eine Form mit eigenen Klassen und es wurde mir auch in den Tutorials geraten, diesen Haken nicht zu setzen.


    In meinem Package habe ich die folgenden (3?) Klassen:

    testframe.class
    testframe$1.class
    testframe$2.class



    Ich kann mir momentan nicht erklären, wo der Fehler liegt....ich finde auch bei Google keine Fehlerbeschreibung hierzu.
    Es ist mein erstes Programm in dieser Entwicklungsumgebung, habe also auch keinerlei Ansatz zur Problemlösung.

    Bitte helft einem Java Neuling. :-D

    Beitrag zuletzt geändert: 7.2.2012 20:37:23 von adelwoehrer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo adelwoehrer,

    wenn Du mal den Link zum Tutorial postest, dann kann man sich das mal anschauen.
    Im Allgemeinen verhält es sich so:
    Eine normale Anwendung benötigt irgendwo die Methode
    public static void main(string[] args)
    weil das der Einstiegspunkt in das Programm ist. Ohne die geht es nicht.
    Ein Applet benötigt im allgemeinen eine Klasse die von Applet abgeleitet ist und die
    public void init();
    public void stop() ;
    public void paint(Graphics g);
    implementiert.
    Ob das mit JavaFX einfacher bzw. anders geht kann ich jetzt nicht sagen.
  4. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    public static void main(String args[])

    ....wäre vorhanden.

    Hier der Link zum Tutorial:
    http://netbeans.org/kb/docs/java/quickstart-gui.html

    Und sicherheitshalber der komplette Quellcode.
    Ich habe nicht groß was gemacht bisher....das meiste wurde also automatisch erstellt.

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package testpackage;
    
    /**
     *
     * @author Nexuscrawler
     */
    public class testframe extends javax.swing.JFrame {
    
        /**
         * Creates new form testframe
         */
        public testframe() {
            initComponents();
        }
    
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            jButton1 = new javax.swing.JButton();
            jScrollPane1 = new javax.swing.JScrollPane();
            jTextArea1 = new javax.swing.JTextArea();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
            jButton1.setText("jButton1");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
    
            jTextArea1.setColumns(20);
            jTextArea1.setRows(5);
            jScrollPane1.setViewportView(jTextArea1);
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addGap(160, 160, 160)
                            .addComponent(jButton1)
                            .addGap(0, 155, Short.MAX_VALUE))
                        .addGroup(layout.createSequentialGroup()
                            .addContainerGap()
                            .addComponent(jScrollPane1)))
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE)
                    .addGap(18, 18, 18)
                    .addComponent(jButton1)
                    .addContainerGap())
            );
    
            pack();
        }// </editor-fold>                        
    
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
            jTextArea1.append("Test\n\r");
        }                                        
    
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            /*
             * Set the Nimbus look and feel
             */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /*
             * If Nimbus (introduced in Java SE 6) is not available, stay with the
             * default look and feel. For details see
             * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(testframe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(testframe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(testframe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(testframe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
    
            /*
             * Create and display the form
             */
            java.awt.EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new testframe().setVisible(true);
                }
            });
        }
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTextArea jTextArea1;
        // End of variables declaration                   
    }
  5. Hallo adelwoehrer,

    vermutlich liegt es daran, dass die Form in einem extra Package liegt.
    Um die Sache zum laufen zu bringen musst Du folgendes machen:
    1. Rechtsklick auf das Projekt (im Projekt-Explorer)
    2. Im erscheinenden Menü auf 'Properties' (Eigenschaften) klicken
    3. Im Dialog auf der linken Seite 'Run' auswählen (wahrscheinlich 'Ausführen' auf deutsch)
    4. Rechts im Feld 'Application Class' den Wert testpackage.testframe eintragen.
    5. Mit 'Ok' bestätigen

    Viel Glück!
  6. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Vielen Dank,

    das hat mein Start-Problem gelöst. =)

    Das HTML-Dokument via Browser abzurufen, liefert allerdings noch immer einen Runtime-Error.
    Screenshot: http://img841.imageshack.us/img841/522/unbenannthoc.png

    access denied? o.O
    java.lang.RuntimePermission



    Ich brauche also eine der folgenden 3 Zeilen?

    public void init();
    public void stop() ;
    public void paint(Graphics g);


    Reicht hier auch die bereits vorhandene Zeile: private void initComponents()?


    Hätte ausserdem durch rumprobieren rausgefunden, dass sich die Klassen-Definition von "public class testframe extends javax.swing.JFrame" auf "public class testframe extends javax.swing.JApplet" ändern lassen würde....das liefert mir zwar konkret keine Fehlermeldungen, aber der Build schlägt natürlich fehl. =)

    Was genau müsste denn in der Funktion "public void init();" stehen?
    Oder müsste ich die Zeile "public static void main(String args[])" damit ersetzen?



    EDIT:

    Habe die Einstellungen unter "Properties --> Run" jetzt mal auf "Run in Browser" umgestellt.
    Beim Debuggen wird mir folgende Meldung geliefert, vielleicht hilft das ja was.
    Executing C:\Dokumente und Einstellungen\XPMUser\Eigene Dateien\NetBeansProjects\test\dist\test.html using C:\Programme\Mozilla Firefox\firefox.exe
    java.lang.InterruptedException
    	at java.lang.Object.wait(Native Method)
    	at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
    	at sun.plugin2.message.Pipe$1.run(Unknown Source)
    	at com.sun.deploy.util.Waiter$1.wait(Unknown Source)
    	at com.sun.deploy.util.Waiter.runAndWait(Unknown Source)
    	at sun.plugin2.message.Pipe.receive(Unknown Source)
    	at sun.plugin2.main.server.JVMInstance$WorkerThread.run(Unknown Source)
    java.lang.InterruptedException
    	at java.lang.Object.wait(Native Method)
    	at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
    	at sun.plugin2.message.Pipe$2.run(Unknown Source)
    	at com.sun.deploy.util.Waiter$1.wait(Unknown Source)
    	at com.sun.deploy.util.Waiter.runAndWait(Unknown Source)
    	at sun.plugin2.message.Pipe.receive(Unknown Source)
    	at sun.plugin2.main.server.HeartbeatThread.run(Unknown Source)
    netscape.javascript.JSException: Plugin instance for applet ID 1 was already released
    	at sun.plugin2.main.server.LiveConnectSupport.getInfo(Unknown Source)
    	at sun.plugin2.main.server.LiveConnectSupport.shutdown(Unknown Source)
    	at sun.plugin2.main.server.JVMInstance.unregisterApplet(Unknown Source)
    	at sun.plugin2.main.server.JVMInstance.recycleAppletID(Unknown Source)
    	at sun.plugin2.main.server.JVMManager.recycleAppletID(Unknown Source)
    	at sun.plugin2.main.server.MozillaPlugin.stopApplet(Unknown Source)
    	at sun.plugin2.main.server.MozillaPlugin.destroy(Unknown Source)
    Exception in thread "main"







    EDIT 2:

    Das Problem lag an der "defaultCloseOperation()" für das Program.
    Diese war auf "EXIT_ON_CLOSE" gestellt, die Close Operation darf aber vom Programm innerhalb eines Browser nicht ausgeführt werden (solange das Programm nicht signiert ist), sondern muss vom Browser selbst erledigt werden, weshalb er mir diesen "access denied" Fehler zurückgab.
    Ich habe den Wert jetzt auf "DO_NOTHING" gestellt, und das Applet lädt entlich fertig....bereitet aber immer noch Probleme.

    Ich erhalte jetzt folgende Fehlermeldung:
    JavaFX application could not launch due to system configuration. See java.com/javafx for troubleshooting information.


    Bin also dem Link gefolgt.
    Das ist einfach die Downloadseite für Java Produkte....habe dort also versucht, Java und JavaFX zu aktualisieren, aber die waren beide bereits auf dem aktuellen Stand.

    Was jetzt? o.O

    Beitrag zuletzt geändert: 8.2.2012 12:35:43 von adelwoehrer
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!