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

despikyxd

Gast
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 ...
 

JonnyAd

Mitglied
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:
D

despikyxd

Gast
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 ...
 
T

Tomate_Salat

Gast
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.
 

JonnyAd

Mitglied
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.
 

Suinos

Bekanntes Mitglied
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.
 

s4ke

Bekanntes Mitglied
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.
 

L-ectron-X

Gesperrter Benutzer
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.
 

JonnyAd

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

JonnyAd

Mitglied
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.
 

JonnyAd

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

JonnyAd

Mitglied
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
 

JonnyAd

Mitglied
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
 

JonnyAd

Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 4
A Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 7
P Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 3
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
S Fehler: "java.lang.NullPointerException" Java Basics - Anfänger-Themen 6
I Erste Schritte Ausführfehler: java.lang.NullPointerException Java Basics - Anfänger-Themen 3
1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Java Basics - Anfänger-Themen 5
S Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 11
V [Greenfoot] java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 10
K Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 6
K OOP java.lang.NullPointerException Java Basics - Anfänger-Themen 2
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4
S Fehlermeldung: java.lang.NullPointerException Java Basics - Anfänger-Themen 10
A Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 16
K java.lang.NullPointerException in Array bei Arraylistübergabe Java Basics - Anfänger-Themen 7
G java.lang.NullPointerException Was tun? Java Basics - Anfänger-Themen 7
J java.lang.NullPointerException . Java Basics - Anfänger-Themen 5
G java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S java.lang.NullPointerException - Bitte helft mir! Java Basics - Anfänger-Themen 5
S java.lang.NullPointerException Fehler bei Umrechnung Java Basics - Anfänger-Themen 3
P java.lang.NullPointerException Java Basics - Anfänger-Themen 19
M java.lang.NullPointerException at . Java Basics - Anfänger-Themen 4
S java.lang.nullpointerexception bei arrayübergabe Java Basics - Anfänger-Themen 30
S java.lang.NullPointerException bei Bildern Java Basics - Anfänger-Themen 13
P java.lang.NullPointerException was ist das? Java Basics - Anfänger-Themen 7
G java.lang.NullPointerException beim objekt Java Basics - Anfänger-Themen 3
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
JaVaN0oB java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 3
P java.lang.ClassCastException Bedeutung und Lösung Java Basics - Anfänger-Themen 3
J Erste Schritte java.lang.NoClassDefFoundError Java Basics - Anfänger-Themen 4
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
T Compiler-Fehler java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 2
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
N jodaTime java.lang.IllegalArgumentException: Invalid format Java Basics - Anfänger-Themen 3
F Erste Schritte java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
R java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 1
V java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
H java.lang.NoClassDefFoundError Run as>> Run on Server Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
M java.lang.Enum.valueOf(Unknown Source) Java Basics - Anfänger-Themen 2
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
C Hilfe!!! java.lang.ClassCastException Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
F Exception in thread main java.lang.StackOverflowError Java Basics - Anfänger-Themen 3
K Caused by: java.lang.NoClassDefFoundError: org/mindrot/jbcrypt/BCrypt Java Basics - Anfänger-Themen 0
OnDemand java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 9
J Klassen java.lang.String - lexikographisches Sortieren Java Basics - Anfänger-Themen 5
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
H Classpath java.lang.NoClassDefFoundError externe Libary Java Basics - Anfänger-Themen 4
M Exception in thread "main" java.lang.NoClassDefFoundError: MeineKlasse Java Basics - Anfänger-Themen 12
X Applet Fehler: java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 45
B java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
H java.lang.IndexOutOfBoundsException bei verschachtelter ArrayList Java Basics - Anfänger-Themen 9
V java.lang.NoSuchMethodError Java Basics - Anfänger-Themen 2
J java.lang.math asin() Java Basics - Anfänger-Themen 18
R Compiler-Fehler java.lang.ArrayIndexOutOfBoundsException, warum? Java Basics - Anfänger-Themen 6
K Error: java.lang.NoSuchMethodException Java Basics - Anfänger-Themen 2
M Compiler-Fehler Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 2
G java.lang.ClassNotFoundException Java Basics - Anfänger-Themen 4
S String index out of range: 8 at java.lang.String.substring(Unknown Source) Java Basics - Anfänger-Themen 13
X Interpreter-Fehler "java.lang.NullPionterException: null" bei BlueJ Java Basics - Anfänger-Themen 10
P java.lang.ClassCastException Java Basics - Anfänger-Themen 2
D java.lang.NoSuchMethodError: main Java Basics - Anfänger-Themen 11
S expected java.lang.string but found char Java Basics - Anfänger-Themen 5
S Umgebungsvariable Exception in thread "main" java.lang.UnsatisfiedLinkError: no J3D in java.librar y.path Java Basics - Anfänger-Themen 15
S Compiler-Fehler java.lang.SecurityException: Invalid signature file digest for Manifest main attributes Java Basics - Anfänger-Themen 5
M Klassen Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 2
A Compiler-Fehler unreported exception java.lang.Exception; must be caught or declared to be thrown Java Basics - Anfänger-Themen 7
K Fehlermeldung: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 Java Basics - Anfänger-Themen 4
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
F Ich kenn mich nicht mehr aus - 'java.lang.NoSuchMethodError: main' in Applet? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben