Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[JAVA] NullPointerException

Empfohlene Antworten

Veröffentlicht

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:

öhm. doch ist sie. ich habe den img-folder im classpath für

build / test / run hinterlegt.

ö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?

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?

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.

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.

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 :)

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:

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

Danke...

jetzt hat es funktioniert. Du hast mir wirklich weiter geholfen.

Grüße

Druid :cool:

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.