NullpointerException und Probleme mit repaint()

lennarttw

Mitglied
Hi Leute, ich arbeite momentan an einer Visualisierung von Sortierverfahren. Mein Ziel ist es meine zufällig generierten Zahlen in ein JPanel reinzeichnen zu lassen. Danach soll der Sortieralgorithmus drüber laufen und dann wieder gezeichnet werden. Ich habe hierzu die paintComponent() Methode bearbeitet und mit repaint() wieder aufgerufen. Nun habe ich zwei Probleme:
1. er wirft mir eine NullpointerException in Zeile 111
Java:
 for(int i = 0; i < zahlen.length; i++){
2. Davor ist nach dem Aufruf von repaint() nichts passiert?!
Hier mein Code:
Java:
public class Facharbeit extends javax.swing.JFrame {
    private JFrame f;
    private JPanel content;
    private DrawPanel p1;
    private DrawPanel p2;
    private DrawPanel p3;
    private DrawPanel p4;
    private JComboBox box1;
    private JComboBox box2;
    private JComboBox box3;
    private JComboBox box4;
    private JButton b1;
    int anzahl = 10;
    int[] zahlen;
    
    private void gui(){
        f = new JFrame("Visualisierung von Sortierverfahren");
        f.setVisible(true);
        f.setSize(1000, 800);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new BorderLayout());
        
        content = new JPanel(new GridBagLayout());
        content.setBackground(Color.GRAY);
        GridBagConstraints c = new GridBagConstraints();
        p1 = new DrawPanel();
        p2 = new DrawPanel();
        p3 = new DrawPanel();
        p4 = new DrawPanel();
        p1.setBorder(BorderFactory.createEtchedBorder());
        p1.setPreferredSize(new Dimension(100,200));
        p2.setBorder(BorderFactory.createRaisedBevelBorder());
        p2.setPreferredSize(new Dimension(100,200));
        p3.setBorder(BorderFactory.createRaisedBevelBorder());
        p3.setPreferredSize(new Dimension(100,200));
        p4.setBorder(BorderFactory.createRaisedBevelBorder());
        p4.setPreferredSize(new Dimension(100,200));
        String[] items = {"Bubblesort", "Selectionsort", "Insertionsort", "Quicksort", "Mergesort"};
        box1 = new JComboBox(items);
        box2 = new JComboBox(items);
        box3 = new JComboBox(items);
        box4 = new JComboBox(items);
        b1 = new JButton("sortieren");
        
        c.insets = new Insets(30, 30 , 30 , 30);
        c.gridx = 0;
        c.gridy = 2;
        b1.addActionListener(new ActionListener(){
           @Override
            public void actionPerformed(ActionEvent evt){
                sortieren();
                p1.repaint();
                
                
                bubbleSort(zahlen);
                p1.repaint();
            }
        });
        
        
        content.add(b1, c);
        c.gridx = 0;
        c.gridy = 1;        
        content.add(box1, c); 
                c.gridx = 1;
        content.add(box2, c); 
                c.gridx = 2;
        content.add(box3, c);
                c.gridx = 3;
        content.add(box4, c);
        
        c.gridx = 0;
        c.gridy = 0;
        content.add(p1, c);
                c.gridx = 1;
                c.gridy = 0;
        content.add(p2, c); 
                c.gridx = 2;
                c.gridy = 0;        
        content.add(p3, c); 
                c.gridx = 3;
                c.gridy = 0;        
        content.add(p4, c);       
        f.add(content, BorderLayout.WEST);
    
    }
    public void sortieren(){
            zahlen = new int [anzahl];
        for (int i = 0; i < anzahl; i++){
            java.util.Random randomGenerator = new java.util.Random();
            zahlen[i] = randomGenerator.nextInt(100);
            
              }
    }
    

    
     private class DrawPanel extends JPanel {
    private int[] zahlen;
    
    @Override
    public void paintComponent (Graphics g){

        super.paintComponents(g);
        int x = 8;
        
        for(int i = 0; i < zahlen.length; i++){

            int zahl = zahlen[i];
            g.drawLine(x, 100-(zahl*2), x, 100);
            x = x+3;
            
            
        }
    }
}

    public int[] bubbleSort( int[] zahlen ) {
        int k = zahlen.length;
        
            while (k > 1) {
                int i = 0;
                while ( i < (k-1)) {
                    if (zahlen[i] > zahlen[i+1]) {
                        int puffer = zahlen[i];
                        zahlen[i] = zahlen[i+1];
                        zahlen[i+1] = puffer;
                       
}
                        i = i+1;
}
                        k = k-1;
}
                        return zahlen;


    }
Vielen Dank für eure Hilfe,
MfG Lennarttw
 

anti-held

Bekanntes Mitglied
Du erhälst die NullPointerException weil deine zahlen Variable in deiner DrawPanel Klasse nicht initialisiert ist.

Ich denke aber eher, dass du auf die zahlen Variable deiner anderen Klasse zugreifen willst. Dafür musst du diese aber auch dorthin übergeben.
 

lennarttw

Mitglied
Denn wenn ich in die Methode
Java:
public void paintComponent (Graphics g){
das array so übergebe
Java:
public void paintComponent (Graphics g, int[] zahlen){
dann kriege ich bei @Override den Fehler 'method does not override or implement a method from a supertype'???:L
 

anti-held

Bekanntes Mitglied
Du könntest in deiner Klasse DrawPanel eine Methode erstellen, die übergebene Zahlen zuordnet und zeichnet:

Java:
public void refresh(int[] zahlen){
    this.zahlen = zahlen;
    repaint();
}

dann solltest du aber trotzdem das Array in der Klasse mit [c]int[] zahlen = new int[0];[/c]
 

lennarttw

Mitglied
Das funktioniert soweit gut, er zeichnet immerhin in mein Panel. Soweit schon mal danke:toll:
Nur zeichnet er nicht nur, sondern übernimmt noch andere Elemente aus dem gesamten JFrame?!


Problem.PNG
 

lennarttw

Mitglied
Java:
public class Facharbeit extends javax.swing.JFrame {
    private JFrame f;
    private JPanel content;
    private DrawPanel p1;
    private JPanel p2;
    private JPanel p3;
    private JPanel p4;
    private JComboBox box1;
    private JComboBox box2;
    private JComboBox box3;
    private JComboBox box4;
    private JButton b1;
    int anzahl = 10;
    int[] zahlen;
    
    private void gui(){
        f = new JFrame("Visualisierung von Sortierverfahren");
        f.setVisible(true);
        f.setSize(1000, 800);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new BorderLayout());
        
        content = new JPanel(new GridBagLayout());
        content.setBackground(Color.GRAY);
        GridBagConstraints c = new GridBagConstraints();
        p1 = new DrawPanel();
        p2 = new JPanel();
        p3 = new JPanel();
        p4 = new JPanel();
        p1.setBorder(BorderFactory.createEtchedBorder());
        p1.setPreferredSize(new Dimension(100,200));
        p2.setBorder(BorderFactory.createRaisedBevelBorder());
        p2.setPreferredSize(new Dimension(100,200));
        p3.setBorder(BorderFactory.createRaisedBevelBorder());
        p3.setPreferredSize(new Dimension(100,200));
        p4.setBorder(BorderFactory.createRaisedBevelBorder());
        p4.setPreferredSize(new Dimension(100,200));
        String[] items = {"Bubblesort", "Selectionsort", "Insertionsort", "Quicksort", "Mergesort"};
        box1 = new JComboBox(items);
        box2 = new JComboBox(items);
        box3 = new JComboBox(items);
        box4 = new JComboBox(items);
        b1 = new JButton("sortieren");
        
        c.insets = new Insets(30, 30 , 30 , 30);
        c.gridx = 0;
        c.gridy = 2;
        b1.addActionListener(new ActionListener(){
           @Override
            public void actionPerformed(ActionEvent evt){
                sortieren();
                p1.refresh(zahlen);
               
                
                bubbleSort(zahlen);
                p1.refresh(zahlen);
               
            }
        });
        
        
        content.add(b1, c);
        c.gridx = 0;
        c.gridy = 1;        
        content.add(box1, c); 
                c.gridx = 1;
        content.add(box2, c); 
                c.gridx = 2;
        content.add(box3, c);
                c.gridx = 3;
        content.add(box4, c);
        
        c.gridx = 0;
        c.gridy = 0;
        content.add(p1, c);
                c.gridx = 1;
                c.gridy = 0;
        content.add(p2, c); 
                c.gridx = 2;
                c.gridy = 0;        
        content.add(p3, c); 
                c.gridx = 3;
                c.gridy = 0;        
        content.add(p4, c);       
        f.add(content, BorderLayout.WEST);
    
    }
    public void sortieren(){
            zahlen = new int [anzahl];
        for (int i = 0; i < anzahl; i++){
            java.util.Random randomGenerator = new java.util.Random();
            zahlen[i] = randomGenerator.nextInt(100);
            
              }
    }
    

    
     private class DrawPanel extends JPanel {
    int[] zahlen = new int[0];
    
    @Override
    public void paintComponent (Graphics g){

        super.paintComponents(g);
        int x = 8;
        
        for(int i = 0; i < zahlen.length; i++){

            int zahl = zahlen[i];
            g.drawLine(x, 100-(zahl*2), x, 100);
            x = x+3;
            
            
        }
    }
    
    public void refresh(int[]zahlen){
        this.zahlen = zahlen;
        repaint();
    }
}

    public int[] bubbleSort( int[] zahlen ) {
        int k = zahlen.length;
            while (k > 1) {
                int i = 0;
                while ( i < (k-1)) {
                    if (zahlen[i] > zahlen[i+1]) {
                        int puffer = zahlen[i];
                        zahlen[i] = zahlen[i+1];
                        zahlen[i+1] = puffer;                       
}
                        i = i+1;
}
                        k = k-1;
} 
                        return zahlen;
    }
 

anti-held

Bekanntes Mitglied
Warum dieser Button in das Feld gezeichnet wird, weiß ich leider auch nicht.
Vill wäre es ratsam, ein kleines Beispiel zu erstellen, das nur diese eine Komponente enthält und automatisch zeichnet.
 

Harry Kane

Top Contributor
Puh. Setze mal die folgenden Kommandos ans Ende deiner gui()-Methode:
Java:
f.pack();
f.setVisible(true);
und schmeiß das f.setVisible(true); am Anfang raus.
 

lennarttw

Mitglied
Kann geclosed werden. Lag daran das ich in public void paintComponent (Graphics g){} die super.paintComponents(g); aufgerufen hatte, und nicht wie richtig paintComponent(g);. Was so ein 's' nicht alles aus machen kann...:oops:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X JList Probleme mit NullPointerException AWT, Swing, JavaFX & SWT 3
_user_q Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException) AWT, Swing, JavaFX & SWT 14
Jose05 Nullpointerexception bei toArray() AWT, Swing, JavaFX & SWT 9
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Nullpointerexception wegen TableView AWT, Swing, JavaFX & SWT 2
ZH1896ZH JavaFX kann NullPointerException nicht auflösen... :( AWT, Swing, JavaFX & SWT 3
M NullPointerException / Controller AWT, Swing, JavaFX & SWT 4
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
L java.lang.NullPointerException - Fehlermeldung AWT, Swing, JavaFX & SWT 2
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
D NullPointerException observableList AWT, Swing, JavaFX & SWT 4
J NullPointerException bei getText() AWT, Swing, JavaFX & SWT 3
S JavaFX NullPointerException bei Versuch ImageView zu ändern AWT, Swing, JavaFX & SWT 1
K JFileChooser NullPointerException AWT, Swing, JavaFX & SWT 7
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
S Swing [CLOSED] NullPointerException bei BorderLayout() AWT, Swing, JavaFX & SWT 8
G Swing NullPointerException und JXImageView AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
U Swing NullPointerException trotz Referenz auf Textfield & Button AWT, Swing, JavaFX & SWT 6
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
K JavaFX Pfad öffen NullPointerException AWT, Swing, JavaFX & SWT 4
H SWT NullPointerException bei Zugriff auf Variablen des Hauptfensters AWT, Swing, JavaFX & SWT 6
L Event Handling windowAdapter - NullPointerException beim Schließen AWT, Swing, JavaFX & SWT 5
J JTable verursacht NullPointerException.Ratlos. AWT, Swing, JavaFX & SWT 5
C JButton NullPointerException AWT, Swing, JavaFX & SWT 2
Q getGraphics() - NullPointerException AWT, Swing, JavaFX & SWT 8
C NullPointerException im MVC Muster AWT, Swing, JavaFX & SWT 9
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
M JTable Drucken NullpointerException +JTable speichern AWT, Swing, JavaFX & SWT 6
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
C Swing NullPointerException beim Hinzufügen von Checkboxes in eine ArrayList AWT, Swing, JavaFX & SWT 5
1 JComponent -> java.lang.NullPointerException AWT, Swing, JavaFX & SWT 13
B Swing NullPointerException bei actionPerformed() AWT, Swing, JavaFX & SWT 2
E java.lang.NullPointerException AWT, Swing, JavaFX & SWT 14
R NullPointerException AWT, Swing, JavaFX & SWT 16
xehpuk Swing NullPointerException: Random-Instanz anfangs nicht initialisiert AWT, Swing, JavaFX & SWT 4
3 Swing NullPointerException in AW Event-0? AWT, Swing, JavaFX & SWT 5
C SWT NullPointerException AWT, Swing, JavaFX & SWT 12
J NullPointerException bei Benutzung vom TableCellRenderer AWT, Swing, JavaFX & SWT 3
A AWT Methodenaufruf "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 4
X NullPointerException beim Einfügen einer JMenuBar AWT, Swing, JavaFX & SWT 4
B NullPointerException bei JFrame AWT, Swing, JavaFX & SWT 2
D JPanel / NullPointerException AWT, Swing, JavaFX & SWT 4
G LookAndFeel Dynamisches Einlesen von LookAndFeels - NullPointerException AWT, Swing, JavaFX & SWT 4
E Login wird durch NullPointerException abgebrochen AWT, Swing, JavaFX & SWT 10
K NullPointerException ohne CodeLink AWT, Swing, JavaFX & SWT 6
L NullPointerException JFreeChart AWT, Swing, JavaFX & SWT 10
F NullPointerException - HILFE!! AWT, Swing, JavaFX & SWT 20
martinyyyy AWT Parameter erzeugen NullpointerException obwohl sie vorhanden sind? AWT, Swing, JavaFX & SWT 4
H Swing NullPointerException in JTable bei vielen Einträgen AWT, Swing, JavaFX & SWT 2
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
S NullPointerException bei JFileChooser AWT, Swing, JavaFX & SWT 8
S NullPointerException bei Aufruf von updateUI() beim JFrame AWT, Swing, JavaFX & SWT 12
Z NullPointerException bei SplashScreen AWT, Swing, JavaFX & SWT 5
C NullPointerException bei Doppelpufferung AWT, Swing, JavaFX & SWT 3
F CardLayout.show() -> NullPointerException AWT, Swing, JavaFX & SWT 4
B NullPointerException bei String vergleich AWT, Swing, JavaFX & SWT 5
K NullPointerException bei JTextField AWT, Swing, JavaFX & SWT 8
L Problem mit "NullPointerException" bei grafischer AWT, Swing, JavaFX & SWT 3
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
loadbrain JTextFields & java.lang.NullPointerException AWT, Swing, JavaFX & SWT 2
F JProgressBar und NullPointerException AWT, Swing, JavaFX & SWT 4
D javax.swing.Timer bringt NullPointerException AWT, Swing, JavaFX & SWT 4
R TextField bringt NullPointerException bei setVisible() AWT, Swing, JavaFX & SWT 12
A NullPointerException in einer JList AWT, Swing, JavaFX & SWT 7
F Fehler: java.lang.NullPointerException AWT, Swing, JavaFX & SWT 2
S Brauche Hilfe mit JFrame - NullPointerException AWT, Swing, JavaFX & SWT 7
A NullPointerException - warum? AWT, Swing, JavaFX & SWT 5
G NullPointerException bei Aufruf von JTabbedPane.getSelectedI AWT, Swing, JavaFX & SWT 7
G Problem mit NullPointerException AWT, Swing, JavaFX & SWT 11
M JTable verursacht NullPointerException AWT, Swing, JavaFX & SWT 8
M NullPointerException AWT, Swing, JavaFX & SWT 3
J NullPointerException bei getSelectedItem AWT, Swing, JavaFX & SWT 10
G Bekomme immer: NullPointerException AWT, Swing, JavaFX & SWT 2
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben