Jump to content

[JAVA] NullPointerException

Empfohlene Beiträge

Hallo Forum,

ich habe folgendes Problem. Ich habe mit Netbeans ein Programm geschrieben.

Wenn ich es in Netbeans direkt ausführe funktioniert alles.

Wenn ich eine .jar-Datei daraus mache und es mit java -jar Icors.jar ausführe

kommt folgende NullPointerException-Meldung:


java.lang.NullPointerException

        at javax.swing.ImageIcon.<init>(Unknown Source)

        at icors.Icors_main.initComponents(Icors_main.java:57)

        at icors.Icors_main.<init>(Icors_main.java:17)

        at icors.Icors_main$6.run(Icors_main.java:263)

        ...

Also hat er was gegen: initComponents(); jInternalFrame1.setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/icors.jpg"))); und gegen new Icors_main().setVisible(true); Wenn ich das ganze mit javaw Icors.jar ausführe bekomme ich die Meldung, dass keine main-Class gefunden wurde, wobei definitiv eine main-class vorhanden ist. Anbei noch die Sources: Icors_main

package icors;



import javax.swing.UIManager;

import java.sql.*;

import java.lang.*;


public class Icors_main extends javax.swing.JFrame {


    public Connection con_icors;


    /** Creates new form Icors_main */

    public Icors_main() {

        try {

        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

        } catch (Exception E) { }

         initComponents();

    }


    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">

    private void initComponents() {

                jInternalFrame1.setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/icors.jpg")));

        jInternalFrame1.setVisible(true);

        jButton1.setText("Login");

        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {

            public void mouseClicked(java.awt.event.MouseEvent evt) {

                jButton1MouseClicked(evt);

            }

        });


        jButton2.setText("Cancel");

        jButton2.addMouseListener(new java.awt.event.MouseAdapter() {

            public void mouseClicked(java.awt.event.MouseEvent evt) {

                jButton2MouseClicked(evt);

            }

        });


        jInternalFrame1.getContentPane().add(jButton2);

        jButton2.setBounds(10, 70, 67, 20);


        jInternalFrame1.setBounds(240, 180, 190, 120);

        desktopPane.add(jInternalFrame1, javax.swing.JLayeredPane.DEFAULT_LAYER);


        jLabel1.setFont(new java.awt.Font("MS Sans Serif", 0, 10));

        jLabel1.setForeground(new java.awt.Color(0, 153, 0));

        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);

        jLabel1.setText("<html>Connection State:</html>");

        jLabel1.setVerticalAlignment(javax.swing.SwingConstants.TOP);

        jLabel1.setVerticalTextPosition(javax.swing.SwingConstants.TOP);

        jLabel1.setBounds(0, 120, 350, 430);

        desktopPane.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);


        jInternalFrame2.getContentPane().setLayout(null);


        jInternalFrame2.setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/icors.jpg")));

        jInternalFrame2.addInternalFrameListener(new javax.swing.event.InternalFrameListener() {

            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {

            }

            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {

            }

            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {

            }

            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {

            }

            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {

            }

            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {

            }

            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {

                jInternalFrame2InternalFrameOpened(evt);

            }

        });


        jLabel4.setFont(new java.awt.Font("MS Sans Serif", 1, 14));

        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);

        jLabel4.setText("<html>ICORS<br>International Commercial Order<br>and Reporting System</html>");

        jLabel4.setVerticalAlignment(javax.swing.SwingConstants.TOP);

        jInternalFrame2.getContentPane().add(jLabel4);

        jLabel4.setBounds(160, 0, 230, 60);


        jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/logo.JPG")));

        jInternalFrame2.getContentPane().add(jLabel5);

        jLabel5.setBounds(10, 10, 131, 195);


        jButton3.setText("Close DB");

        jButton3.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {

                jButton3ActionPerformed(evt);

            }

        });


        jInternalFrame2.getContentPane().add(jButton3);

        jButton3.setBounds(350, 180, 80, 25);


        jInternalFrame2.getContentPane().add(jTextArea1);

        jTextArea1.setBounds(180, 67, 100, 140);


        jInternalFrame2.setBounds(130, 190, 450, 240);

        desktopPane.add(jInternalFrame2, javax.swing.JLayeredPane.DEFAULT_LAYER);


        getContentPane().add(desktopPane, java.awt.BorderLayout.CENTER);


        fileMenu.setText("File");

        openMenuItem.setText("Open");

        fileMenu.add(openMenuItem);


        saveMenuItem.setText("Save");

        fileMenu.add(saveMenuItem);


        saveAsMenuItem.setText("Save As ...");

        fileMenu.add(saveAsMenuItem);


        exitMenuItem.setText("Exit");

        exitMenuItem.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {

                exitMenuItemActionPerformed(evt);

            }

        });


        fileMenu.add(exitMenuItem);


        menuBar.add(fileMenu);


        editMenu.setText("Edit");

        cutMenuItem.setText("Cut");

        editMenu.add(cutMenuItem);


        copyMenuItem.setText("Copy");

        editMenu.add(copyMenuItem);


        pasteMenuItem.setText("Paste");

        editMenu.add(pasteMenuItem);


        deleteMenuItem.setText("Delete");

        editMenu.add(deleteMenuItem);


        menuBar.add(editMenu);


        helpMenu.setText("Help");

        contentMenuItem.setText("Contents");

        helpMenu.add(contentMenuItem);


        aboutMenuItem.setText("About");

        helpMenu.add(aboutMenuItem);


        menuBar.add(helpMenu);


        setJMenuBar(menuBar);


        pack();

    }

    // </editor-fold>


    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        System.exit(0);

    }                                                                             


    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             

        System.exit(0);

    }                                            


    /**

     * @param args the command line arguments

     */

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {

                new Icors_main().setVisible(true);

            }

        });

    }

}

so..

also ich sehe in diesen Dingern keine Fehler oder sonstiges, aber vielleicht

bin ich auch nur blind. Wäre schön, wenn Ihr mir helfen könnt.

Thx & Greetz

Druid :cool:

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
öhm. doch ist sie.
Nein, ist sie nicht - sonst würdest du die Fehlermeldung, die du oben bekommst nicht erhalten.

Mach in deinem Main-Programm mal einen Output auf die Konsole:

System.err.println("Image-URL: " + this.getClass().getResource("/icors.jpg"));

Steht da null?

Mit Sicherheit ja - also ist das Bild nicht im Classpath.

Steht da entgegen aller Erwartungen doch eine URL, dann melde dich nochtmal.

ich habe den img-folder im classpath für

build / test / run hinterlegt.

Auch genau an der Stelle, wo Class#getResource() ihn erwartet?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

hoi,

also ich habe das Statement eingetippt und Netbeans nochmal

durchorgeln lassen:

Output:

Image-URL: file:/C:/Dokumente%20und%20Einstellungen/saj6567/Icors/Icors/img/icors.jpg

Also null ist es nicht... kann des sein, dass Java mit den Leerzeichen

in Dokumente und Einstellungen ein Problem hat?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Also Fakt ist, dass deine Fehlermeldung nur dann auftritt, wenn das Bild im Classpath nicht vorhanden ist:

java.lang.NullPointerException

  at javax.swing.ImageIcon.<init>(Unknown Source)

  at icors.Icors_main.initComponents(Icors_main.java:57)

Du schreibst ausserdem:

Wenn ich es in Netbeans direkt ausführe funktioniert alles.
und

also ich habe das Statement eingetippt und Netbeans nochmal durchorgeln lassen:
Bringt nix, denn du hast ja oben schon geschrieben, dass von NetBeans intern alles funktioniert.

Hast du es auch beim externen Start ausprobiert? Wenn nicht, dann los.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

hab ich jetzt extern ausgeführt mit java -jar Icors.jar.

Der kommt allerdings gar nicht an den Punkt wo

er mir System.err.println("Image-URL: " + this.getClass().getResource("/icors.jpg"));

ausgeben könnte. Er rennt schon vorher in ne NullPointerException rein.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Er rennt schon vorher in ne NullPointerException rein.
Und?

Wo genau?

Stacktrace?

Code?

Meine Glaskugel hat wegen zu großer Hitze eben ihren Geist aufgegeben.

Mir wird das hier jetzt zu blöd... Wenn du Hilfe haben willst, dann poste aussagekräftige Fehlermeldungen und die dazugehörigen Code-Passagen (komplette Sourcen sind unnötig) und vor allem verstehe, was du eigentlich machst, und wieso welche Exception geschmissen wird:

public class NullPointerException extends RuntimeException

Thrown when an application attempts to use null in a case where an object is required.

Also versuche schonmal selber zu checken, wieso das Objekt an genau dieser Stell null ist.

Und am besten folgst du auchmal dem zweiten Link in meiner Signatur :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

dann eben nicht.

<sarkasmus anfang>

es tut mir ja leid, dass ich nicht als Code-Guru auf die Welt gekommen

bin und die Tastatur Tag und Nacht an meinen Fingern klebt.

<sarkasmus ende>

Erstens kann ich nirgends sehen, wo genau er in NullPointerException läuft.

Zweitens habe ich die Fehlermeldung gepostet. Gleich am Anfang. Und die hat

sich auch nicht geändert.

Und da der erste Teil der Fehlermeldung in einen (unknown source) bei

javax.swing.ImageIcon läuft, obwohl ein Objekt zurückgegeben wird kam

mir das ganze spanisch vor.

Und wenn das posten von ganzen Sources sinnlos ist verstehe ich nicht,

wie du ein Verständnis für den Source entwickeln willst, aber egal....

Also hier werde ich auf jeden Fall nicht mehr posten... wenn alle so leicht

eingeschnappt sind!

Greetz

Druid :cool:

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Also mal ganz ruhig hier bleiben... Ist doch alles halb so wild.

Also mit "getClass().getResource("icors.jpg")" bekommst du die Ressource. Aber auch nur, wenn sie wirklich mitsamt dem kompletten Pfad (also in der richtigen Ordnerstruktur) liegt!

So, und da dein Package "icors" heißt, muss dein Icon auch im Ordner "icors" (innerhalb des Jars) liegen...

Ach ja, Java hat ab und zu Probleme mit Leerzeichen. Deshalb hat die Package-Struktur ja auch keine Leerzeichen. ;)

So, nun pack dein Icon in das Icon.jar in den Ordner "icors" und rufe dein Java-Programm mit "java -cp .;Icors.jar;class-jar-archiv.jar icors.Icors_main" auf...

Wenn du die Klassen und das Icon in ein und dem selben Jar hast, reicht auch ein "java -cp .;class-jar-archiv-mit-Bildern.jar icors.Icors_main"!

So, nun probiere das mal...

Grüße Peet

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Ja... meine Glaskugel funktioniert noch! ;)

An was hat es denn nun gelegen?

An der Ordnerstruktur?

Edit:

@Perdi

Von wegen "ordentliche Fehlermeldung" und so...

Wenn man den geposteten Quellcode sieht UND die Fehlermeldung hat (siehe erster Post), kann man auch ne ordentliche Antwort geben... ;)

Ich hab auch keine Glaskugel. :rolleyes:

Gerade bei dem Fehler ist es relativ einfach den eigentlichen Fehler einzugrenzen.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

jo an der Ordnerstruktur. ich hab die Image-Dateien zwar in dem Ordner gelassen. Hab aber den kompletten Projektordner ins Root kopiert. und da

hats dann geklappt.

Warum auch immer.. Wahrscheinlich echt die Leerzeichen..

Danke nochmal für deine Hilfe.. deine Antworten versteht wenigstens auch

ein Anfänger ;o)

Greetz

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Nimm an der Diskussion teil

Du kannst jetzt hier posten und Dich später registrieren. Wenn Du bereits über eine Konto verfügst, melde Dich jetzt an, um mit Deinem Konto zu posten.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


Fachinformatiker.de, 2020 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung