2015-02-11 2 views
-2

Я занимаюсь простой Java-игрой, чтобы узнать ее. Я хочу программу с квадратной ведьмой, которую вы можете щелкнуть, и она меняет цвет, чем я не хочу, чтобы иметь возможность щелкнуть ее в течение 8 секунд. Я знаю, что я не делаю таймер более высоким, я делаю это специально, чтобы проверить, может ли он выйти из него первым, прежде чем использовать сон.Темы JAVA не работают

Пока это моя программа застревает, и я не могу ее закрыть, поэтому я пробую темы, но она по-прежнему не работает. Может ли кто-нибудь сказать мне, что я делаю неправильно?

import javax.swing.*; 
import java.awt.*; 
class ViewControll extends JFrame 
{ 
JPanel playerPanel; 
Dimension playerPlotDimension; 
Plot plot00; 
Thread t; 

public ViewControll() 
{ 
    playerPlotDimension=new Dimension(200,200); 
    plot00 = new Plot(playerPlotDimension); 
    t= new Thread(plot00); 
    createAndShowGUI(); 
} 

private void createAndShowGUI() 
{ 
    setTitle("ALPHA 0.1"); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLayout(new FlowLayout()); 
    setSize(400,400); 
    setVisible(true); 
    t.start(); 
    add(plot00);  

} 

public static void main(String args[]) 
{ 
    new ViewControll(); 
} 


} 

А вот второй класс

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.BorderFactory; 
import javax.swing.JPanel; 

public class Plot extends JPanel implements Runnable 
{ 
int plotstate; 
int timer; 

public Plot(Dimension playerPlotDimension) 
{ 
    plotstate =0; 
    timer =0; 
    setBackground(Color.GRAY); 
    setPreferredSize(playerPlotDimension); 
    setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY,5,true)); 
    setToolTipText("Werkt Dit?"); 
} 

@Override 
public void run() 
{ 
    addMouseListener(new MouseAdapter() 
    { 
      public void mousePressed(MouseEvent me) 
      { 

      switch (plotstate) 
      { 
       case 0: setBackground(Color.GREEN); 
         plotstate = 1; 
       break; 
       case 1: setBackground(Color.DARK_GRAY); 
         while (timer != 8) 
         { 
         plotstate =0; 
         } 
       break; 
      } 
      } 
    }); 

} 







} 
+0

Куда вы увеличите количество таймеров? – Anto

+2

Все, что вы делаете, это добавить MouseListener. Выполнение этой операции в другом потоке не будет иметь никакого значения; сам слушатель будет вызываться в потоке отправки событий. – yole

+0

Я удалил инкремент таймера, чтобы проверить, останется ли он в цикле. Так что я неправильно использую потоки? как я должен использовать его, чем? – Zeepblok

ответ

0

Я исправил это так, это хороший гуманного?

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.BorderFactory; 
import javax.swing.JPanel; 


public class Plot extends JPanel implements Runnable 
{ 
int plotstate; 
int growtimer; 

public Plot(Dimension playerPlotDimension) 
{ 
    plotstate =0; 
    growtimer =0; 
    setBackground(Color.GRAY); 
    setPreferredSize(playerPlotDimension); 
    setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY,5,true)); 
    setToolTipText("Werkt Dit?"); 

    addMouseListener(new MouseAdapter() 
    { 
      public void mousePressed(MouseEvent me) 
      { 

      switch (plotstate) 
      { 
       case 0: setBackground(Color.GREEN); 
         plotstate = 1; 
       break; 
       case 1: setBackground(Color.DARK_GRAY); 
         run(); 
       break; 
      } 
      } 
    }); 


} 


@Override 
public void run() 
{ 
    while (growtimer != 8) 
    { 
     plotstate =0; 
     try 
     { 
      Thread.sleep(1000); 
     } 
     catch (InterruptedException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     growtimer++;   
    } 
} 
+0

Вы должны сказать ... сработали? –

+0

Ваш метод # run() увеличивает шаг умножения на восемь раз за восемь секунд, но что это значит? Где в вашем коде что-нибудь смотрят на growtimer? –

+0

Я хочу, чтобы он спал в течение 8 секунд, и после этого изменил его сюжетное состояние ..... и я просто ответил на свой вопрос ... почему я использую цикл while, мне это не нужно haha – Zeepblok

0

Если вы хотите, чтобы ваш участок будет «отключен» в течение 8 секунд, то почему бы вам не только сохранить время щелчка, а затем игнорировать последующие клики в то время как 8 сек не прошлое? примерно:

public class Plot extends JPanel implements Runnable 
{ 
int plotstate; 
long clicktime; 
... 
public Plot(Dimension playerPlotDimension) 
{ 
    plotstate =0; 
    growtimer =0; 
    setBackground(Color.GRAY); 
    setPreferredSize(playerPlotDimension); 
    setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY,5,true)); 
    setToolTipText("Werkt Dit?"); 

    addMouseListener(new MouseAdapter() 
    { 
      public void mousePressed(MouseEvent me) 
      { 

      switch (plotstate) 
      { 
       case 0: setBackground(Color.GREEN); 
         plotstate = 1; 
         clicktime = System.currentMillis(); 
       break; 
       case 1: setBackground(Color.DARK_GRAY); 
         if (System.currentMillis() - clicktime > 8000) 
         { 
         plotstate = 0; 
         } 
       break; 
      } 
      } 
    }); 


} 
Смежные вопросы