2017-05-20 2 views
0

J'ai écrit un programme, qui ouvre une fenêtre et si vous le fermez, il en ouvrira deux nouveaux. Cela fonctionne bien, mais j'ai essayé de changer la couleur de toutes les fenêtres en utilisant le service d'exécution, qui appelle ma fonction ColorChanger.en utilisant le service d'exécution de java avec une méthode non statique

Le problème est: Si je veux utiliser le service de l'exécuteur, je besoin d'une méthode statique, mais si je veux utiliser la commande this.getContentPane().setBackground(Color.blue);, je dois utiliser une fonction non statique.

Si vous avez besoin de plus amples informations, s'il vous plaît avoir regarder mon code, tout devrait par auto-expliquer:

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 
} 

Répondre

0

THe fqct est que vous devez instancier l'objet si vous souhaitez utiliser une méthode de classe hs sans la rendre statique :)

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

essayez et il devrait fonctionner

+0

merci beaucoup cela fonctionne parfaitement – JayJay

+0

Pourquoi créez-vous deux instances de 'SplittingWindow'? – korolar

+0

@korolar parce que c'est un programme amusant qui crée deux fenêtres chaque fois que vous fermez un – JayJay