NullPointerException beim Bilderladen

[QUOTE=Zombiepriester]
3.NIEMAND hat mir gesagt wie ich paintComponent aufzurufen habe[/QUOTE]
paint() und paintComponent() werden von der VM aufgerufen, wenn es nötig wird, die Oberfläche (neu) zu zeichnen. Der Programmierer ruft diese Methoden niemals auf!
Die Ausführung der Methoden kann man jedoch anstoßen, in dem man repaint() aufruft.

Dazu vielleicht noch dieses Tutorial: http://wiki.byte-welt.net/wiki/Malen_in_AWT_und_Swing

Hast du auch die Dateinamen für die Bilder angepasst (image01.jpg zu Socius1.png)?

[QUOTE=Zombiepriester;19421]
3.NIEMAND hat mir gesagt wie ich paintComponent aufzurufen habe[/QUOTE]

Wie schon gesagt wurde (und in den verlinkten Tutorials und auf jeder anderen Seite, wo irgendwas mit „malen“ und „Bilder“ und „Swing“ vorkommt) wird das nicht direkt aufgerufen. Insbesondere führt deine vermeintliche Lösung, „getGr*phics“ aufzurufen, mit Sicherheit zu Problemem, spätestens wenn man die Fenstergröße ändert oder das Fenster aus anderen Gründen neu gezeichnet werden muss. Versuch’ vielleicht doch nochmal den geposteten Code, mit den angepassten Dateinamen. Wenn die Bilder im gleichen Verzeichnis liegen, wie die .class (nicht die .java, sondern die .class!) sollte das gehen.

Den Code VERSTEHE ich NICHT, du sagtest meine methode gibt probleme,
wie kann ich es besser machen, es aber ungefähr so lassen wie es ist, aber, dass es keine Probleme macht?
Und bitte nicht so kompliziert wie dein code.

[QUOTE=L-ectron-X]paint() und paintComponent() werden von der VM aufgerufen, wenn es nötig wird, die Oberfläche (neu) zu zeichnen. Der Programmierer ruft diese Methoden niemals auf!
Die Ausführung der Methoden kann man jedoch anstoßen, in dem man repaint() aufruft.
[/QUOTE]
Wenn ich repaint aufrufe kommt das:

Socius.java:35:5: error: cannot find symbol
repaint();
^
symbol: method repaint()
location: class Socius
1 error

    import javax.swing.*;
    import javax.imageio.*;
    import java.net.*;
    import java.awt.*;
    import java.io.*;
         
public class Socius{
  
  public static JFrame fenster;
  public Image soc1;
  public Image soc2;
  
  public static void main(String[] args) {
    fenster = new JFrame("Socius");
    Socius s = new Socius();
    fenster.pack();
    fenster.setSize(1600,865);
    fenster.setVisible(true);
    fenster.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    s.laden();
  }
  public void laden(){
    Socius soc = new Socius();
    try{
      soc1 = ImageIO.read(getClass().getResource("Socius1.png"));
      soc2 = ImageIO.read(getClass().getResource("Socius2.png"));
    } catch(IOException e){;
      System.err.println(e);
    }
    repaint();
  }
  
  protected void paintComponent(Graphics g){
    g.drawImage(soc1, 0, 0, fenster);
    g.drawImage(soc2, 5, 100, fenster);
  }
  
}

In der Zwischenzeit hab ich weitergeschrieben und es hat sich ein problem mit dem KeyListner ergebn, nämlich, dass ich mit keyTyped() Startmenue() aufrufe um Vorspann() zu überspringen, aber dann im Startmenü vorspann gezeigt wird.

import javax.swing.*;
import javax.imageio.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
         
public class Socius{
  
  public static JFrame fenster;
  public static Image soc1;
  public static Image soc2;
  
  public static void main(String[] args) {
    fenster = new JFrame("Socius");
    Socius s = new Socius();
    fenster.pack();
    fenster.setSize(1600,865);
    fenster.setVisible(true);
    fenster.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    fenster.addKeyListener(new L_Taste());
    s.laden();
  }
  static class L_Taste implements KeyListener{
    public void keyTyped(KeyEvent e){Startmenue();}
    public void keyPressed(KeyEvent e){}
    public void keyReleased(KeyEvent e){} 
  }  
  public void laden(){
    Socius soc = new Socius();
    try{
      soc1 = ImageIO.read(getClass().getResource("Socius1.png"));
      soc2 = ImageIO.read(getClass().getResource("Socius2.png"));
    } catch(IOException e){;
      System.err.println(e);
    }
    vorspann();
  }
  
  protected void vorspann(){
    Graphics g = fenster.getGraphics();
    g.setColor(Color.black);
    g.drawString("(Zum überspringen beliebige Taste drücken)",700,700);       
    g.drawString("... präsentiert",750,100);
    try{Thread.sleep(3000);}
    catch(InterruptedException e){
      g.setColor(Color.black);
    g.drawString("ERROR",750,100);}    
    g.setColor(Color.white);
    g.drawString("... präsentiert",750,100);
    g.drawString("(Zum überspringen beliebige Taste drücken)",700,700);
    g.setColor(Color.black);
    g.drawString("Ein Spiel von ...",750,100);
    try{Thread.sleep(3000);}
    catch(InterruptedException e){
      g.setColor(Color.black);
    g.drawString("ERROR",750,100);}   
    g.setColor(Color.white);
    g.drawString("Ein Spiel von ...",750,100);
    g.setColor(Color.black);
    g.drawString("Code von ...",750,100);
    try{Thread.sleep(3000);}
    catch(InterruptedException e){
      g.setColor(Color.black);
    g.drawString("ERROR",750,100);}    
    g.setColor(Color.white);  
    g.drawString("Code von ...",750,100);  
    g.setColor(Color.black);  
    g.drawString("Grafiken von ...",750,100);
    try{Thread.sleep(3000);}
    catch(InterruptedException e){
      g.setColor(Color.black);
    g.drawString("ERROR",750,100);}    
    g.setColor(Color.white);  
    g.drawString("Grafiken von ...",750,100);  
    g.setColor(Color.black); 
    g.drawString("Idee von ...",730,100);
    try{Thread.sleep(3000);}
    catch(InterruptedException e){
      g.setColor(Color.black);
    g.drawString("ERROR",750,100);}    
    g.setColor(Color.white); 
    g.drawString("Idee von ...",730,100);    
    Startmenue();
  }
  
  public static void Startmenue(){
    Graphics g = fenster.getGraphics();
    g.drawImage(soc1, 5, 25, 1590, 855, fenster);
    try { 
      Thread.sleep(500);
    } catch(InterruptedException e) {
      return;
    }
    g.drawImage(soc2, 5, 200, fenster);
    g.drawString("Neues Spiel", 45, 262);
    try { 
      Thread.sleep(500);
    } catch(InterruptedException e) {
      return;
    }
    g.drawImage(soc2, 5, 300, fenster);
    g.drawString("Gesp. Spiele", 45, 362);
    try { 
      Thread.sleep(500);
    } catch(InterruptedException e) {
      return;
    }
    g.drawImage(soc2, 5, 400, fenster);
    g.drawString("Optionen", 45, 462);
    try { 
      Thread.sleep(500);
    } catch(InterruptedException e) {
      return;
    }
    g.drawImage(soc2, 5, 500, fenster);
    g.drawString("Extras", 45, 562);
    try { 
      Thread.sleep(500);
    } catch(InterruptedException e) {
      return;
    }
    g.drawImage(soc2, 5, 600, fenster);
    g.drawString("Beenden", 45, 662);
  }
  
}

In der Hoffnung, dass das jetzt nicht zuuu demotivierend wirkt: Das wird so nichts. Du kannst nicht einfach Code runterschreiben, der den Methodennamen nach so aussieht, als könnte er das machen, was du willst. Programmieren ist schwer, und Spiele programmieren ist schwer. Und wenn du meinst, ein Spiel in eine Methode einer Klasse pressen zu können, wird das recht kurzfristig nur zu Frust führen. Lies dir Dinge durch wie http://wiki.byte-welt.net/wiki/Malen_in_Swing_Teil_1:_der_grundlegende_Mechanismus und probiere den Code dort aus, und versuche, anhand der Beschreibung den Code nachzuvollziehen. Und wenn es Fragen gibt, dann stelle die, und jeder, der sich die Mühe macht, hier zu antworten, wird versuchen, eine hilfreiche Antwort zu geben. Aber wenn du 120 Zeilen code wie den obigen postest und fragst “Was ist hier falsch” oder “Warum geht das nicht”, kann man kaum mehr sagen als: “Das ist falsch weil der Code nicht stimmt” oder “Es geht nicht, weil es falsch programmiert ist”.

Alles funktioniert mit den Bildern, ich glaub auch, dass ichs einigermaßen verstanden hab, bloss eins noch:
Das HintergrundBild ist soseltsam verzerrt, kann jmd. helfen?

    protected void paintComponent(final Graphics g){
      super.paintComponent(g);
      g.drawImage(soc1, 0, 0, 1600, 855, this);
      g.drawImage(soc1, 5, 25, 1590, 855, this);
      g.drawImage(soc2, 5, 200, this);
      g.drawString("Neues Spiel", 45, 262);
      g.drawImage(soc2, 5, 300, this);
      g.drawString("Gesp. Spiele", 45, 362);
      g.drawImage(soc2, 5, 400, this);
      g.drawString("Optionen", 45, 462);
      g.drawImage(soc2, 5, 500, this);
      g.drawString("Extras", 45, 562);
      g.drawImage(soc2, 5, 600, this);
      g.drawString("Beenden", 45, 662);
    }

um die Verzerrung zu sehen, kontaktiert mich auf Skype da kann ich es schicken.
(Zombiepriester)

UUps, hab ja das 1. Bild 2 mal geladen.
Noch eine Frage:
In meinem alten Code der so fehlerhaft war, konnte ich problemlos Thread. sleep verwenden, jetzt gehts nicht mehr, was muss ich machen?