2017-05-20 2 views
0

Ich habe ein Programm geschrieben, das ein Fenster öffnet und wenn Sie es schließen, wird es zwei neue öffnen. Es funktioniert gut, aber ich habe versucht, die Farbe aller Fenster zu ändern, indem ich den Executor-Service verwende, der meine Funktion ColorChanger aufruft.mit Java-Executor-Service mit einer nicht-statischen Methode

Das Problem ist: Wenn ich den Testamentsvollstrecker Service nutzen möchten, lege ich eine statische Methode, aber wenn ich den this.getContentPane().setBackground(Color.blue); Befehl verwenden möchten, ich habe eine nicht-statische Funktion verwenden.

Wenn Sie weitere Informationen benötigen, wenden Sie sich bitte Blick auf mein Code haben, alles sollte durch selbsterklärend:

public class SplittingWindow extends JFrame implements WindowListener,KeyListener { 

    int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(); 
    int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight(); 
    Random rand = new Random(); 
    String Input = new String(); 
    static ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); 

    public static void main(String[] args) { 
     executorService.scheduleAtFixedRate(() -> ColorChanger(), 0, 1, TimeUnit.SECONDS); 
     new SplittingWindow(); 
    } 

    SplittingWindow(){ 
     addWindowListener(this); 
     addKeyListener(this); 
     setResizable(false); 
     setSize(100,100); 
     setVisible(true); 
     setLocation(rand.nextInt(width-150),rand.nextInt(height-200)+50); 
    } 

    public void ColorChanger(){ 
     getContentPane().setBackground(Color.blue); 
    } 

    public void windowClosing(WindowEvent arg0) { 
     System.out.println("closing"); 
     new SplittingWindow(); 
     new SplittingWindow(); 
     dispose(); 
    } 

    public void keyTyped(KeyEvent e) { 
     Input = Input + e.getKeyChar(); 
     if(Input.contains("JayJay")==true){ 
      System.exit(0); 
     } 
    } 


    // Removed various interface methods 
} 

Antwort

0

DIe fqct ist das Objekt instanziieren müssen, wenn Sie eine Methode von hs-Klasse verwenden möchten es statisch :)

public static void main(String[] args) { 
     SplittingWindow sp = new SplittingWindow(); 
     executorService.scheduleAtFixedRate(() -> sp.ColorChanger(), 0, 1, TimeUnit.SECONDS); 
    } 

dies, ohne versuchen, und es sollte funktionieren

+0

Sie danken sehr viel es funktioniert perfekt – JayJay

+0

Warum Sie zwei schaffen Instanzen von 'SplittingWindow'? – korolar

+0

@korolar, weil es ein lustiges Programm ist, das jedes Mal, wenn Sie ein Fenster schließen, zwei Fenster erstellt – JayJay

Verwandte Themen