java.lang.NullPointerException

JonnyAd

Mitglied
Ich bekomme bei jedem 5. Lauf meines Programms folgende Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.JComponent._paintImmediately(JComponent.java:5087)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:612)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


Was ist hier das Problem?
 
die antwort ist ... KLIRR ... glaskugel kaputt ...

junge ... das kann dir keiner sagen ohne das du deinen code postest ... weil die exception erstens im EDT geworfen wird und zweitens in diesem StackTrace keinerlei informationen stehen was genau NULL ist ...
 
Wenn ich auf den Startbutton klicke, startet eine Progressbar die auch angezeigt wird.
Nach drei Sekunden verschwindet dieses und das jPan zusammen mit der Zeit, seit der das jPan zu sehen ist, erscheinen.

Genau an dieser Stelle, erfolgt gelegentlich die obene genannte Fehlermeldung:

if (pbarConcentration.getValue()==pbarConcentrationTimeUL ) {
pbarConcentration.setValue(0);
timerpbar.cancel();
jPan2.remove(jPanpbar);
jPan2.add(jPan, BorderLayout.CENTER);
jPan2.updateUI();


Der gesamte Code:

Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.MouseEvent;
import java.applet.*;
import java.util.Timer;
import java.util.TimerTask;
import java.net.MalformedURLException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;


public class findnumbers extends JApplet {

private JButton[] jbt;
private int zaehler;
private JPanel jPan = new JPanel();
private JPanel jPan2 = new JPanel();
private JPanel jPanpbar = new JPanel();
private JPanel jPanpbarFlowLayout = new JPanel();
private JPanel jPanpersonalBest = new JPanel();
private JPanel ParameterPan = new JPanel();
private JPanel ParameterPan2 = new JPanel();
private JPanel ParameterPan3 = new JPanel();
private JPanel ParameterPan4 = new JPanel();
private JPanel mainPan = new JPanel();
private JButton jbtStart = new JButton("Start"){
public Dimension getPreferredSize(){
    return new Dimension(100,25);
    }
    };
private JLabel zeitlbl = new JLabel("Time",SwingConstants.CENTER);
private JLabel zeitlbl2 = new JLabel("Test",SwingConstants.CENTER);
private JLabel personalBest1 = new JLabel(" ",SwingConstants.CENTER);
private JLabel personalBest2 = new JLabel(" ",SwingConstants.CENTER);
private JLabel personalBest3 = new JLabel(" ");
private JLabel personalBest4 = new JLabel(" ");
private JLabel personalBest5 = new JLabel(" ");
private final static int NUMBER_OF_RIGHTSOUNDS = 9;
private final static int NUMBER_OF_WRONGSOUNDS = 6;
private AudioClip[] audioRight = new AudioClip[NUMBER_OF_RIGHTSOUNDS];
private AudioClip[] audioWrong = new AudioClip[NUMBER_OF_WRONGSOUNDS];
private long aTime,bTime,cTime;
private boolean isStandalone = false;
private int btimeaktintern = 0;
private int runtime;
private Color  sbuttonbgc = Color.decode("#" + "888522");
private Color sbuttonbgcp = Color.decode("#" + "775544");
private int nfieldsoundr = 0;
private int nfieldsoundw = 0;
private int fsbolt = 1;
private int  nfieldfs= 20;
private Color nfieldbgc = Color.decode("#" + "F5FF9C");
private Color nfieldbgcpr = Color.decode("#" + "000066");
private Color nfieldbgcpw = Color.decode("#" + "FF0000");
private Color  nfieldfc= Color.decode("#" + "000000");
private Color nfieldfcp = Color.decode("#" + "FFFFFF");
private Color  efieldbgc= Color.decode("#" + "555555");
private Color  sbuttonfc= Color.decode("#" + "000000");
private Color  tfieldbgc= Color.decode("#" + "eeeeee");
private Color  tfieldfc= Color.decode("#" + "000000");
private int bgonline = 1;
private int msize = 6;
private double format2 = (double)msize;
private int z= (int)((format2*format2+0.5)*8.0/10.0);
private int l=msize*msize - z;
private boolean[] a = new boolean[l+z];
private int[] b = new int[z];
private JProgressBar pbarConcentration;
private int pbarConcentrationTime=0;
private int pbarConcentrationTimeUL = 1000;
private Timer timer;
private Timer timerpbar;
private TimerTask timertask;
private TimerTask timerpbartask;
private boolean isstarted = false;

 public void init(){
    if (!isStandalone) {
    sbuttonbgc = Color.decode("#" + getParameter("sbuttonbgc"));
    sbuttonbgcp = Color.decode("#" + getParameter("sbuttonbgcp"));
    nfieldsoundr =Integer.parseInt(getParameter("nfieldsoundr"));
    nfieldsoundw = Integer.parseInt(getParameter("nfieldsoundw"));
    fsbolt = Integer.parseInt(getParameter("fsbolt"));
    nfieldfs= Integer.parseInt(getParameter("nfieldfs"));
    nfieldbgc = Color.decode("#" + getParameter("nfieldbgc"));
    nfieldbgcpr = Color.decode("#" + getParameter("nfieldbgcpr"));
    nfieldbgcpw = Color.decode("#" + getParameter("nfieldbgcpw"));
    nfieldfc= Color.decode("#" + getParameter("nfieldfc"));
    nfieldfcp = Color.decode("#" + getParameter("nfieldfcp"));
    efieldbgc= Color.decode("#" + getParameter("efieldbgc"));
    sbuttonfc= Color.decode("#" + getParameter("sbuttonfc"));
    tfieldbgc= Color.decode("#" + getParameter("tfieldbgc"));
    tfieldfc= Color.decode("#" + getParameter("tfieldfc"));
    bgonline = Integer.parseInt(getParameter("bgonline"));
    btimeaktintern = Integer.parseInt(getParameter("btimeakt"));
    msize = Integer.parseInt(getParameter("msize"));
    format2 = (double)msize;
    z= (int)((format2*format2+0.5)*8.0/10.0);
    l=msize*msize - z;
        for (int i = 0; i < NUMBER_OF_RIGHTSOUNDS; i++) {
            audioRight[i] = getAudioClip(getDocumentBase(), "audio/right" + i +".wav");
        }
        for (int i = 0; i < NUMBER_OF_WRONGSOUNDS; i++) {
            audioWrong[i] = getAudioClip(getDocumentBase(), "audio/wrong" + i + ".wav");
        }    
    }
    personalBest1.setForeground(nfieldfc);
    personalBest1.setFont(new java.awt.Font("Arial", 0, nfieldfs-2)); // NOI18N(nfieldfs);
    personalBest2.setForeground(nfieldfc);
    personalBest2.setFont(new java.awt.Font("Arial", 0, nfieldfs-2)); // NOI18N(nfieldfs);
    
    jbt = new JButton[z+l];

    jPan.setLayout(new GridLayout(msize,msize,1,1));
    jPan.setBackground(efieldbgc);

    for (int zi = 0; zi<z+l;zi++){
        jbt[zi] = new JButton();
        zButton(zi, fsbolt, nfieldfs, nfieldbgc, nfieldfc);
        if ((nfieldsoundr == 0) && (nfieldsoundw == 0)) {
            jbt[zi].addMouseListener(new zjbtNoSoundMouseListener ());
        }
        else if ((nfieldsoundr == 0) && (nfieldsoundw > 0)){
            jbt[zi].addMouseListener(new zjbtNoRightSoundMouseListener ());
        }
        else {
             jbt[zi].addMouseListener(new zjbtMouseListener ());
        }
        jPan.add(jbt[zi]);
    }

    zeitlbl.setOpaque(true);
    zeitlbl.setBackground(tfieldbgc);
    zeitlbl.setFont(new Font("Arial", Font.BOLD, 14));
    zeitlbl.setForeground(tfieldfc);
    zeitlbl2.setBackground(tfieldbgc);
    zeitlbl2.setOpaque(true);
    jbtStart.setBorder(BorderFactory.createRaisedBevelBorder());
    jbtStart.setFocusPainted(false);
    jbtStart.setBackground(sbuttonbgc);
    jbtStart.setForeground(sbuttonfc);
    jbtStart.setMnemonic(KeyEvent.VK_S);
    jbtStart.addActionListener(new jbtStartActionListener ());
    UIManager.put("Button.select", sbuttonbgcp);   
    ParameterPan.setLayout(new BorderLayout(0,0));

    pbarConcentration = new JProgressBar(0, pbarConcentrationTimeUL);
    pbarConcentration.setBorderPainted(true);
    pbarConcentration.setForeground(nfieldbgcpw);
    jPanpbarFlowLayout.add(pbarConcentration);
    jPanpbar.setLayout(new GridLayout(2,1,0,0));
    jPanpbar.add(personalBest5);
    jPanpbar.add(jPanpbarFlowLayout);

    ParameterPan.add(zeitlbl2, BorderLayout.NORTH);
    ParameterPan2.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
    ParameterPan2.add(jbtStart);
    ParameterPan3.setLayout(new FlowLayout(FlowLayout.LEFT, 50, 10));
    ParameterPan3.add(zeitlbl);
    ParameterPan4.setLayout(new BorderLayout(5, 5));
    ParameterPan4.add(ParameterPan2, BorderLayout.WEST);
    ParameterPan4.add(ParameterPan3, BorderLayout.EAST);
    ParameterPan.add(ParameterPan4,BorderLayout.SOUTH);
    ParameterPan.setBorder(BorderFactory.createRaisedBevelBorder() );
    ParameterPan2.setBackground(tfieldbgc);
    ParameterPan3.setBackground(tfieldbgc);
    ParameterPan4.setBackground(tfieldbgc);
    ParameterPan.setBackground(tfieldbgc);
    mainPan.setLayout(new BorderLayout(0,0));
    jPanpersonalBest.setLayout(new GridLayout(6,1,0,0));

    personalBest1.setOpaque(true);
    personalBest2.setOpaque(true);
    personalBest1.setText("Your personal record:");
    personalBest2.setText(btimeaktintern + " Sec");
    jPanpersonalBest.add(personalBest3);
    jPanpersonalBest.add(personalBest4);
    jPanpersonalBest.add(personalBest1);
    jPanpersonalBest.add(personalBest2);
    jPan2.setLayout(new BorderLayout(0,0));
    jPan2.add(jPanpersonalBest, BorderLayout.CENTER);
    mainPan.add(jPan2, BorderLayout.CENTER);
    mainPan.add(ParameterPan, BorderLayout.SOUTH);
    add(mainPan);    
 }

Dann:

Java:
private class jbtStartActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {

        zaehler = 1;
        a = zufBelegung(z,l);
        b = setZahl(z);

        for (int i=0, zi=0;  i<(l+z);i++){
            if (a[i]==true) {
                zButton(i, fsbolt, nfieldfs, nfieldbgc, nfieldfc);
                jbt[i].setText(String.valueOf(b[zi] +1));
                zi++;
            }
            else {
                lButton(i, efieldbgc);
            }
         }

        pbarConcentrationTime=0;
        pbarConcentration.setValue(pbarConcentrationTime);
        jPan2.removeAll();
        jPan2.add(jPanpbar, BorderLayout.CENTER);
        jPan2.updateUI();

        if (isstarted)
            timertask.cancel();

        timerpbar = new Timer();
        timerpbartask = new TimerTask() {
            public void run() {
                
              if (pbarConcentration.getValue()==pbarConcentrationTimeUL ) {
                pbarConcentration.setValue(0);
                timerpbar.cancel();
                jPan2.remove(jPanpbar);
                jPan2.add(jPan, BorderLayout.CENTER);
                jPan2.updateUI();

                isstarted = true;
                timer = new Timer();
                timertask = new TimerTask() {
                    public void run() {
                    if ((zaehler-1)==z) {
                        timer.cancel();
                        for (int i=0; i<(z+l);i++) {
                            jbt[i].setBackground(new java.awt.Color(255, 215, 0));
                            jbt[i].setForeground(new java.awt.Color(0, 0, 0));
                        }

                                runtime = (int)cTime/10;

                                if (((btimeaktintern==0) || (runtime < btimeaktintern)) && (bgonline==1)) {
                                   btimeaktintern= runtime;
                                   UIManager.put("Button.select",new java.awt.Color(230, 230, 230));
                                   JOptionPane.showMessageDialog(null, "New personal record!", "Result", 1);

                                    jbtStart.setEnabled(false);
                                    try {
                                        URL url = new URL("http://xxxxxxxxxxxxxxxxxxxx");

                                        PhpPostConnect con = new PhpPostConnect(url);

                                        try {
                                            con.send(String.valueOf(msize) + "=" + String.valueOf(btimeaktintern));
                                            con.read();
                                            JOptionPane.showMessageDialog(null, "Result saved!", "Status", 1);
                                            jbtStart.setEnabled(true);
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                    } catch (MalformedURLException e) {
                                        e.printStackTrace();
                                    }
                                }

                            jPan2.remove(jPan);
                            personalBest1.setText("Your personal record:");
                            personalBest2.setText(btimeaktintern + " Sec");
                            jPan2.add(jPanpersonalBest, BorderLayout.CENTER);
                            jPan2.updateUI();                                
                        }
                    else {
                        bTime = System.currentTimeMillis();
                        cTime = bTime - aTime;
                        zeitlbl.setText(String.valueOf(cTime/1000) +  "." + String.valueOf((int)(cTime % 1000)/100) + " Sec");
                        }
                    }
                   };

                timer.scheduleAtFixedRate(timertask, 0, 200);
                aTime = System.currentTimeMillis();
  
            }
             else {
                pbarConcentration.setValue(pbarConcentration.getValue() + 25);
             }
            }
           };

        timerpbar.scheduleAtFixedRate(timerpbartask, 0, 25);
                
    }
}




Und schließlich:

Java:
private class zjbtNoSoundMouseListener extends MouseAdapter {
 public void mousePressed(MouseEvent e) {
    for(int i=0; i<jbt.length; i++){
        if ((e.getSource() == jbt[i]) && (jbt[i].isEnabled())) {
            jbt[i].setForeground(nfieldfcp);
            if (Integer.parseInt(jbt[i].getText())== zaehler) {
                UIManager.put("Button.select", nfieldbgcpr);
                zaehler++;
                }
            else {
                UIManager.put("Button.select", nfieldbgcpw);
            }
            break;
        }

    }

}

public void mouseReleased(MouseEvent e) {
    for(int i=0; i<jbt.length; i++){
        if ((e.getSource() == jbt[i]) && (jbt[i].isEnabled())) {
            jbt[i].setForeground(new java.awt.Color(0, 0, 0));
            UIManager.put("Button.select", sbuttonbgcp);
        break;
        }
    }
}
}


private class zjbtNoRightSoundMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
    for(int i=0; i<jbt.length; i++){
        if ((e.getSource() == jbt[i]) && (jbt[i].isEnabled())) {
            jbt[i].setForeground(nfieldfcp);
            if (Integer.parseInt(jbt[i].getText())== zaehler) {
                UIManager.put("Button.select", nfieldbgcpr);
                zaehler++;
                }
            else {
                audioWrong[nfieldsoundw].play();
                UIManager.put("Button.select", nfieldbgcpw);
            }
            break;
        }
    }
}

public void mouseReleased(MouseEvent e) {
    for(int i=0; i<jbt.length; i++){
        if ((e.getSource() == jbt[i]) && (jbt[i].isEnabled())) {
            jbt[i].setForeground(new java.awt.Color(0, 0, 0));
            UIManager.put("Button.select", sbuttonbgcp);
        break;
        }
    }
}
}


private class zjbtMouseListener extends  MouseAdapter {
public void mousePressed(MouseEvent e) {
    for(int i=0; i<jbt.length; i++){
        if ((e.getSource() == jbt[i]) && (jbt[i].isEnabled())) {
            jbt[i].setForeground(nfieldfcp);
            if (Integer.parseInt(jbt[i].getText())== zaehler) {
                audioRight[nfieldsoundr].play();
                UIManager.put("Button.select", nfieldbgcpr);
                zaehler++;
                }
            else {
                audioWrong[nfieldsoundw].play();
                UIManager.put("Button.select", nfieldbgcpw);
            }
            break;
        }
    }
}

public void mouseReleased(MouseEvent e) {
    for(int i=0; i<jbt.length; i++){
        if ((e.getSource() == jbt[i]) && (jbt[i].isEnabled())) {
            jbt[i].setForeground(new java.awt.Color(0, 0, 0));
            UIManager.put("Button.select", sbuttonbgcp);
        break;
        }
    }
}
}


private boolean[] zufBelegung(int z, int l){
    boolean[] a2 = new boolean[z+l];
    int j;

    for (int i=0; i<(z+l); i++)
    a2[i]= false;

    for (int i =0; i<z;) {
    j = (int)(Math.random()*(z+l));
    if (a2[j]==false) {
       a2[j]=true;
       i++;
    }
    }
    return a2;
}

private int[] setZahl(int z) {
    int[] b2 = new int[z];
    int j;

    boolean[] a3 = new boolean[z];
    for (int i=0; i<z; i++)
    a3[i]= false;

    for (int i =0; i<z;) {
    j = (int)(Math.random()*(z));
    if (a3[j]== false) {
       b2[i]=j;
       a3[j]=true;
       i++;
        }
    }
    return b2;
}

private void lButton(int zi, Color efieldbgc) {
    jbt[zi].setText("");
    jbt[zi].setBackground(efieldbgc);
    jbt[zi].setFont(new java.awt.Font("Arial", 0, 24)); // NOI18N
    jbt[zi].setForeground(efieldbgc);
    jbt[zi].setBorder(null);
    jbt[zi].setBorderPainted(false);
    jbt[zi].setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    jbt[zi].setFocusPainted(false);
    jbt[zi].setEnabled(false);
}

private void zButton(int zi, int fsbolt, int nfieldfs, Color nfieldbgc, Color nfieldfc) {
    jbt[zi].setBackground(nfieldbgc);
    jbt[zi].setFont(new java.awt.Font("Arial", fsbolt, nfieldfs)); // NOI18N
    jbt[zi].setForeground(nfieldfc);
    jbt[zi].setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jbt[zi].setBorder(null);
    jbt[zi].setBorderPainted(false);
    jbt[zi].setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    jbt[zi].setFocusPainted(false);
    jbt[zi].setPreferredSize(new Dimension(100, 20));
    jbt[zi].setEnabled(true);
}

private class PhpPostConnect {
    private URL sitepath;

    private URLConnection con;

    public PhpPostConnect() {

    }

    public PhpPostConnect(URL sitepath) {
        this.sitepath = sitepath;
    }

    public void setSitePath(URL sitepath) {
        this.sitepath = sitepath;
    }

    public URL getSitePath() {
        return this.sitepath;
    }

    public void send(String data) throws IOException {
        if (con == null) {
            con = sitepath.openConnection();
        }

        if (!con.getDoOutput()) {
            con.setDoOutput(true);
        }

        OutputStream out = con.getOutputStream();
        out.write(data.getBytes());
        out.flush();
    }

        public String read() throws IOException {
        if (con == null) {
            con = sitepath.openConnection();
        }

        InputStream in = con.getInputStream();
        int c = 0;
        StringBuffer incoming = new StringBuffer();

        while (c >= 0) {
            c = in.read();
            incoming.append((char) c);
        }

        return incoming.toString();
    }
}
    
 public static void main(String args[]) {
   JFrame f = new JFrame();

   findnumbers applet = new findnumbers();
   applet.isStandalone = true;   
   applet.init();
   applet.start();
   
   f.add(applet);
   f.setTitle("FindNumbers");
   f.setSize(6*50+2,6*50+101);
   f.setLocationRelativeTo(null);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setVisible(true);
   f.setResizable(false);
 }
}
 
Zuletzt bearbeitet:
also erstmal ... GROB FAHRLÄSSIG ODER MUTWILLIG ? ... alter wie groß sollen wir es denn noch schreiben ... JAVA-CODE-TAGS NUTZEN -.-'

das WILL sich so hier keiner durchlesen ....

außerdem : PRIVATE CLASS ? ... also ne name-inner-class ... das hilft nich wirklich weil es kein compile-bares beispiel ist ... wir bräuchten dann mal bitte den kompletten relevaten oder vollständigen source ...
 
JavaAPI hat gesagt.:
public void updateUI()

Resets the UI property with a value from the current look and feel.
wieso du so oft updateUI aufrufst entzieht sich mir.

despikyxd hat recht, das ist viel Source und ich bin mir nicht mal sicher ob es der relevante ist. Naja, aber sein Umgangston :autsch:. Debugge mal dein Projekt oder schau zu, dass du ein KSKB zusammen bekommst. Gibt es noch andere Exceptions oder hast du diese evtl. gekürzt? Weil diese ist so wie sie jz ist natürlich eher suboptimal.

ach ja, und große rote und fette Schriften zu ignorieren ist eher schlecht. Bitte nutze Java-Tags.
 
Dies ist mein erste Projekt in Java. Bin also noch totaler Anfänger.

Ist das nun so in Ordnung, weil viel Code kann ich da nicht rausschmeißen damit es läuft. Es ist eben die Kernstelle des Programms. updateUI(); ist notwendig, da ich ein und ausblendungen vornehme, die andernfalls nicht richtig oder nicht sofort eingefügt werden.
 
Diese Art von Exception (im EDT, ohne dass eigener Code aufgerufen wurde), sollte meines Wissens nur dann auftreten, wenn das GUI nicht im EDT verändert wird.

Und was sehe ich da:
[JAVA=29]
timerpbartask = new TimerTask() {
public void run() {

if (pbarConcentration.getValue()==pbarConcentrationTimeUL ) {
pbarConcentration.setValue(0);
timerpbar.cancel();
jPan2.remove(jPanpbar);
jPan2.add(jPan, BorderLayout.CENTER);
jPan2.updateUI();
[/code]
Dieser Task läuft in einem eigenen Thread, also nicht im EDT.
Lerne also, diesen zu benutzen, lass all diesen Code vom EDT ausführen und dann sollte die Exception nicht mehr auftreten.
 
Oder als Alternative zu TimerTask:

[Java]
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//verändere die GUI
}
});
[/Java]

Das lässt das ganze irgendwann im EDT aufrufen. Alternativ kannst du auch invokeAndWait benutzen, da wird der aktuelle Thread solange blockiert, bis die Aktion fertig ist.
 
Du hast ein Applet geschrieben. Im StackTrace finden sich Hinweise auf eine AccessControlException. Nachfolgend dann die NullpointerException.
Es wäre also durchaus möglich, dass die NullpointerException irgendwo im EDT geworfen wird, wenn du zuvor eine für unsignierte Applets nicht erlaubte Operation durchführst.
Ich habe deinen Code nur überflogen, habe aber gesehen, dass du Dateien lädst und dich zu einer URL verbinden möchtest. Möglicherweise steht das in direktem Zusammenhang mit deinem Problem.
 
Ich habe den zweiten Timer in eine eigene Methode gepackt, die aufgerufen wird, sobald die Aufgaben des ersten Timers abgearbeitet sind und der Timer gecancelt wurde.

Habe dann das Ganze 50 mal getestet und siehe da, Fehlermeldungen gibt es keine mehr.

Danke an alle!
 
Zuletzt bearbeitet:
Hast du jetzt schon den Inhalt den EDT abarbeiten lassen?

Ich habe es so gemacht, wie ich es oben geschrieben habe. Wie schon gesagt, ich bin Java-Anfänger, mehr kann
ich da jetzt nicht sagen.

Java:
private class jbtStartActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {

        zaehler = 1;
        a = zufBelegung(z,l);
        b = setZahl(z);

        for (int i=0, zi=0;  i<(l+z);i++){
            if (a[i]==true) {
                zButton(i, fsbolt, nfieldfs, nfieldbgc, nfieldfc);
                jbt[i].setText(String.valueOf(b[zi] +1));
                zi++;
            }
            else {
                lButton(i, efieldbgc);
            }
         }

        zeitlbl.setText("Time");
        pbarConcentrationTime=0;
        pbarConcentration.setValue(pbarConcentrationTime);
        jPan2.removeAll();
        jPan2.add(jPanpbar, BorderLayout.CENTER);
        jPan2.updateUI();

        if (timerpbartaskIsStarted)
            timerpbartask.cancel();

        timerpbar = new Timer();
        timerpbartask = new TimerTask() {
            public void run() {
            timerpbartaskIsStarted = true;
            if (pbarConcentration.getValue()==pbarConcentrationTimeUL ) {
                    timerpbar.cancel();
                    timerpbartask.cancel();
                    viewNumbers();
            }
             else {
                pbarConcentration.setValue(pbarConcentration.getValue() + 25);
             }
            }
           };

        timerpbar.scheduleAtFixedRate(timerpbartask, 0, 25);
  
    }
}



Java:
private void viewNumbers(){
    pbarConcentration.setValue(0);
    jPan2.remove(jPanpbar);
    jPan2.add(jPan, BorderLayout.CENTER);
    jPan2.updateUI();


    if (timertaskIsStarted)
        timertask.cancel();
    
    timer = new Timer();
    timertask = new TimerTask() {
        public void run() {
            timertaskIsStarted = true;
            if ((zaehler-1)==z) {
                timer.cancel();
                timertask.cancel();
                viewResult();

            }
             else {
                bTime = System.currentTimeMillis();
                cTime = bTime - aTime;
                runtime1=(int)(cTime/1000);
                runtime2=(int)((cTime % 1000)/10);
                zeitlbl.setText(String.valueOf(runtime1) +  "." + (String.valueOf(df.format(runtime2))) + " Sec");

            }
        }
       };

    timer.scheduleAtFixedRate(timertask, 0, 50);
    aTime = System.currentTimeMillis();
}


Java:
private void viewResult() {
    for (int i=0; i<(z+l);i++) {
    jbt[i].setBackground(nfieldbgc);
    jbt[i].setForeground(nfieldfc);
    }

        //runtime = (int)cTime/10;
        runtime= runtime1*100+runtime2;

        if ((btimeaktintern==0) || (runtime < btimeaktintern))  {
           btimeaktintern= runtime;
           UIManager.put("Button.select",new java.awt.Color(230, 230, 230));

            jPan2.remove(jPan);
            personalBest1.setForeground(nfieldbgcpr);
            personalBest2.setForeground(nfieldbgcpr);
            personalBest1.setText("New personal record!");
            personalBest2.setText(" ");
            jPan2.add(jPanpersonalBest, BorderLayout.CENTER);
            jPan2.updateUI();


            if (bgonline==1) {
                jbtStart.setEnabled(false);
                try {
                    URL url = new URL("http://xxxxxxxxxxxxxxxxxxx");

                    PhpPostConnect con = new PhpPostConnect(url);

                    try {
                        con.send(String.valueOf(msize) + "=" + String.valueOf(btimeaktintern));
                        con.read();
                        JOptionPane.showMessageDialog(null, "Result saved!", "Status", 1);
                        jbtStart.setEnabled(true);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        }
}


An welcher Stelle der Fehler nun auftrat, weis ich jetzt nicht mehr, da ich damit nicht mehr gerechnet hatte. Nun habe ich den zweiten Timer auch entsprechend angepasst bzw. eine weitere Methode erstellt.
 
Habe die drei Parts nun doch wieder zusammengelegt und mit InvokeLater angereichert.
Aber ich muss zugeben, so richtig verstanden habe ich das, was ich da gemacht habe nicht.

Können die Profis unter euch noch einmal einen Blick drauf werfen? Ist das so OK?
Laufen tut es zumindest und eine Fehlermeldung habe ich noch nicht erhalten.


Java:
private class jbtStartActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {

        zaehler = 1;
        a = zufBelegung(z,l);
        b = setZahl(z);

        for (int i=0, zi=0;  i<(l+z);i++){
            if (a[i]==true) {
                zButton(i, fsbolt, nfieldfs, nfieldbgc, nfieldfc);
                jbt[i].setText(String.valueOf(b[zi] +1));
                zi++;
            }
            else {
                lButton(i, efieldbgc);
            }
         }

  
new Thread() {
            public void run() {
                
         SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                zeitlbl.setText("Time");
                pbarConcentrationTime=0;
                pbarConcentration.setValue(pbarConcentrationTime);
                jPan2.removeAll();
                jPan2.add(jPanpbar, BorderLayout.CENTER);
                jPan2.updateUI();
            }
          }); 
                          
        if (timerpbartaskIsStarted)
            timerpbartask.cancel();                
                
                    
            timerpbar = new Timer();
            timerpbartask = new TimerTask() {
                public void run() {
                timerpbartaskIsStarted = true;
                if (pbarConcentration.getValue()==pbarConcentrationTimeUL ) {
                        timerpbar.cancel();
                        timerpbartask.cancel();

                         SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                pbarConcentration.setValue(0);
                                jPan2.remove(jPanpbar);
                                jPan2.add(jPan, BorderLayout.CENTER);
                                jPan2.updateUI();       
                            }
                          });                        

                          
                        if (timertaskIsStarted)
                            timertask.cancel();

                        timer = new Timer();
                        timertask = new TimerTask() {
                            public void run() {
                                timertaskIsStarted = true;
                                if ((zaehler-1)==z) {
                                    timer.cancel();
                                    timertask.cancel();
                                    

                                        SwingUtilities.invokeLater(new Runnable() {
                                            public void run() {

                                             for (int i=0; i<(z+l);i++) {
                                                jbt[i].setBackground(nfieldbgc);
                                                jbt[i].setForeground(nfieldfc);
                                                }                            
                                            }
                                          });                                    


                                            //runtime = (int)cTime/10;
                                            runtime= runtime1*100+runtime2;

                                            if ((btimeaktintern==0) || (runtime < btimeaktintern))  {
                                               btimeaktintern= runtime;
                                               
                                                SwingUtilities.invokeLater(new Runnable() {
                                                    public void run() {
                                                       UIManager.put("Button.select",new java.awt.Color(230, 230, 230));

                                                            jPan2.remove(jPan);
                                                            personalBest1.setForeground(nfieldbgcpr);
                                                            personalBest2.setForeground(nfieldbgcpr);
                                                            personalBest1.setText("New personal record!");
                                                            personalBest2.setText(" ");
                                                            jPan2.add(jPanpersonalBest, BorderLayout.CENTER);
                                                            jPan2.updateUI();
                                                    }
                                                  });
    


                                                if (bgonline==1) {
                                                    jbtStart.setEnabled(false);
                                                    try {
                                                        URL url = new URL("http:xxxxxxxxxxxxxxxxx");

                                                        PhpPostConnect con = new PhpPostConnect(url);

                                                        try {
                                                            con.send(String.valueOf(msize) + "=" + String.valueOf(btimeaktintern));
                                                            con.read();
                                                            JOptionPane.showMessageDialog(null, "Result saved!", "Status", 1);
                                                            jbtStart.setEnabled(true);
                                                        } catch (IOException e) {
                                                            e.printStackTrace();
                                                        }
                                                    } catch (MalformedURLException e) {
                                                        e.printStackTrace();
                                                    }
                                                }
                                            }                                           
                                            
 

                                }
                                 else {
                                    bTime = System.currentTimeMillis();
                                    cTime = bTime - aTime;
                                    runtime1=(int)(cTime/1000);
                                    runtime2=(int)((cTime % 1000)/10);
                                    
                                    SwingUtilities.invokeLater(new Runnable() {
                                        public void run() {
                                        zeitlbl.setText(String.valueOf(runtime1) +  "." + (String.valueOf(df.format(runtime2))) + " Sec");
                                        }
                                    });
                                    


                                }
                            }
                           };

                        timer.scheduleAtFixedRate(timertask, 0, 50);
                        aTime = System.currentTimeMillis();            
                }
                 else {

                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            pbarConcentration.setValue(pbarConcentration.getValue() + 25);
                        }
                      });
                 }
                }
               };

            timerpbar.scheduleAtFixedRate(timerpbartask, 0, 25);      
             
            }
        }.start();     
  }
}
 
Zuletzt bearbeitet:
Bis jetzt hat sich die Fehlermeldung nicht wieder ergeben.

Dennoch habe ich noch folgendes Problem: Wenn ich die Sounddateien intergriere, werde diese manchmal direkt zweimal hintereinander abgespielt. Woran kann das liegen?

Gruß Jonny
 
InvokeLater habe ich nun verstanden. Naja, viel zu verstehen gibt es da auch nicht.

Allerdings führt InvokeLater dazu, dass die Einblendung nicht sofort vorgenommen wird. Das bedeutet, dass die Progressbar nach Ablauf für eine Sekunde festhängt, bevor der Code in InvokeLater
abgearbeitet ist, bzw. die Einblendung erfolgt. Wird der Code hingegen nicht im EDT abgearbeitet,
so gibt es keine Verzögerung, aber gelegentlich die oben aufgeführte Fehlermeldung. Die entsprechende Codestelle war:


Java:
        timerpbar = new Timer();
        timerpbartask = new TimerTask() {
            public void run() {
            timerpbartaskIsStarted = true;

            if (pbarConcentration.getValue()==pbarConcentrationTimeUL ) {
                    timerpbar.cancel();
                    timerpbartask.cancel();

                     SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            jbtStart.setEnabled(true);
                            jbtStart.setText("Stop"); 
                            cardLayout.next(jPanCard); 
                            jPanCard.updateUI();
                            pbarConcentration.setValue(0);
                        }
                      });

                    timer = new Timer(); 
                    timertask = new TimerTask() {

Dieser Code wird ja aufgerufen wenn auf ein Button gedrückt wird. Die Verzögerung tritt übrigens nur beim ersten Mal auf. Wird der Button ein zweites Mal gedrückt, läuft es perfekt. Wie bekomme ich es hin, dass es bereits beim ersten Klick auf den Button perfekt funktioniert?

JonnyAd
 
Bevor ich auf Swing verzichte und alles auf AWT umstelle: Könnte unter den Erfahrenen von euch nicht doch noch jemand etwas dazu sagen?

Grüße Jonny
 

Zurück
Oben