Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Das war eben genau eines dieser Beispiele, wo ich nicht weiß was "timer.schedule( new Task(), 2000 );" genau bewirkt. Verzögert das nun einfach den Ablauf des Programms um 2 Sekunden, oder was?
Nein, es startet einen Thread, der selbst 2 Sekunden parallel zum eigendlichen Programm wartend "abläuft" und danach die Run der Runnable des TimerTask der Task.
Welchen Inhalt muss denn TimerTask haben?
Derzeitiger Code (ohne TimerTask ...)
Java:
package rahmen1;
import java.awt.event.*;
import javax.swing.*;
import java.util.Timer;
import java.util.TimerTask;
public class Fenster1
{
class Task extends TimerTask
{
@Override public void run()
{
Platte.add (Knopf1);
}
}
public static void main(String[] args)
{
JFrame Rahmen = new JFrame();
Rahmen.setSize (400,300);
Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JPanel Platte = new JPanel ();
JButton Knopf1 = new JButton ("klick");
Rahmen.setContentPane (Platte);
Rahmen.setVisible (true);
Timer timer = new Timer();
// Start in 2 seconds
timer.schedule( new Task(), 2000 );
Knopf1.addActionListener (new ActionListener()
{
public void actionPerformed (ActionEvent x)
{
}
});
}
}
Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
No enclosing instance of type Fenster1 is accessible. Must qualify the allocation with an enclosing instance of type Fenster1 (e.g. x.new A() where x is an instance of Fenster1).
Mhm wenn ich das richtig sehe, möchtest du nach der Wartezeit nur Änderungen an deiner GUI vornehmen (Komponenten hinzufügen, irgendwas sichtbar machen etc.), das sollte allerdings vom EDT ausgeführt werden, daher wäre mein Vorschlag direkt den Swing-Timer zu benutzen. Ich würde evlt. den Button auch schon direkt vorher hinzufügen aber nicht sichtbar machen, nach Ablauf dann einfach nur setVisible aufrufen.
Irgendwie so vllt.:
Java:
package rahmen1;
import java.awt.event.*;
import javax.swing.*;
public class Fenster1 {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame rahmen = new JFrame();
rahmen.setSize(400, 300);
rahmen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel platte = new JPanel();
final JButton knopf1 = new JButton("klick");
knopf1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent x) {
}
});
knopf1.setVisible(false);
platte.add(knopf1);
rahmen.setContentPane(platte);
rahmen.setVisible(true);
Timer t = new Timer(0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
knopf1.setVisible(true);
}
});
t.setRepeats(false);
t.setInitialDelay(20000);
t.start();
}
});
}
}