Boolean Kıyaslamada Sorun

Thread ile alıştırma yapmak için click oyunu yaptım (daha önceden yapmıştım ama saniye çalışmıyordu) Sorun şu ki: if(boolean==true) dememe rağmen actived ile true kıyaslamıyor anladığım kadarıyla çünkü boolean’a true değeri dönüyor sorun nedir?

Kod:

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;

public class TimerGUI extends JFrame implements Runnable {
	JButton button;
	JLabel time;
	JLabel cc;
	static boolean actived = false;
	
	 public void run(){
	        try{
	            while(Integer.parseInt(time.getText())>0){
	            	int i = Integer.parseInt(time.getText());
	            	i--;
	            	time.setText(Integer.toString(i));
	                Thread.sleep(1000);
	                
	                if(i==0) {
	                	JOptionPane.showMessageDialog(null,"Your click: "+cc.getText(), "Click Game", JOptionPane.DEFAULT_OPTION);
	                	cc.setText("0");
	                	time.setText("30");
	                }
	                
	            }
	            // Bir takım işlemler
	        }catch(Exception e){}
	    
		
		
	}
	 
	 
	
	public TimerGUI() {
		setTitle("Click Game");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500,800);
		setLayout(null);
		setResizable(false);
		getContentPane().setBackground(Color.gray);
		
		
		button = new JButton("Click");
		button.setBounds(0, 362, 500, 400);
		button.setFocusPainted(false);
		button.setBackground(Color.DARK_GRAY);
		button.setForeground(Color.LIGHT_GRAY);
		button.setBorderPainted(false);

		
		button.addActionListener((ActionEvent e)->{
			actived = true;
			System.out.println(actived);
			cc.setText(Integer.toString(Integer.parseInt(cc.getText())+1));		
			

			
		});
		
		
		
		
		time = new JLabel("30");
		time.setBounds(10, 10, 50, 30);
		time.setForeground(Color.LIGHT_GRAY);
		time.setFont(new Font("Arial",Font.CENTER_BASELINE,30));
		time.setHorizontalAlignment(SwingConstants.CENTER);
		
		cc = new JLabel("0");
		cc.setBounds(2,110,500,160);
		cc.setFont(new Font("Arial",Font.CENTER_BASELINE,200));
		cc.setHorizontalAlignment(SwingConstants.CENTER);

		
		add(cc);
		add(time);
		add(button);
		setVisible(true);
	}
	
	
	
	public static void main(String[]args) {
		new TimerGUI();
		

		if(actived == true) {
			Thread thread = new Thread(new TimerGUI());
			thread.start();
		}
		
		
		
	}


}

Sorun boolean kiyaslamada degil.

true yapildiginda yazdirdigin gibi main'de true kontrolu yapilmadan hemen once veya yapildiktan hemen sonra da yazdirirsan sorunun ne oldugu ortaya cikar.

(actived == true kontrolu actived true olana kadar beklemez.)

1 Beğeni
System.out.println(actived);
		if(actived == true) {
			Thread thread = new Thread(new TimerGUI());
			thread.start();
		}
		System.out.println(actived);

Şu şekilde değil mi? Ve yazdırdığımda ikiside false çıkıyor ama tuşa tıkladığımda boolean’ı true yapıyor nasıl çözücem?

boolean true olana kadar surekli kontrol edebilirsin (arada kisa bir sure sleep ederek)
boolean true oldugunda yapmak istedigin isi boolean’i true yapan yere koyabilirsin.

1 Beğeni

Büyük ihtimal ile ben anlamıyorum ama zaten programdaki click butonuna tıkladığım zaman boolean’ı true yapıyor. Ama aşağıda true olmuyor.

Gayet basit anlatmış aslında:

Program ilk başladığında burası bir defa çalışıyor ve bitiyor:

Yani daha sonra actived’in değeri değişse bile kontrol yapacak bir kod yok.

Şuanda en uygun çözüm bu if bloğunun içindekileri actived’ı true yapan yere koymak gibi duruyor.