JavaRush /Java блог /Архив info.javarush /помогите разобраться блок if в while
d9v4
15 уровень
Nevinnomyssk

помогите разобраться блок if в while

Статья из группы Архив info.javarush
Вот фрагмент моего кода, он прекрасно компилируется и работает но вот только если убрать System.out.println(""); из цикла то ничего уже не работает, если вставить любую другую команду вместо System.out.println(""); все норм. Никак не могу понять почему. public class LDgui { static boolean flag = false; static boolean flag2 = false; private int sec = 0; JLabel label; public static void main(String[] args) { LDgui ld = new LDgui(); ld.go(); while (true) { System.out.println("");//вот это место if (flag==true) { ld.timer(); } //int i = 0; } }
Комментарии (24)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
AndreGold Уровень 28
5 сентября 2015
Предполагаю, что все дело в многопоточности. У вас цикл while(true) загружает полностью процессор, т.е квантовое время, которое распределяет процессор между потоками не предоставляется больше ниодному из потоков.

Если сказать просто, то поток(thread) – это путь программного выполнения. Большинство программ, написанных сегодня, запускаются одним потоком, проблемы начинают возникать, когда несколько событий или действий должны произойти в одно время. Допустим, например, программа не способна рисовать картинку пока выполняет чтение нажатия клавиш. Программа должна уделять всё своё внимание клавиатуре, вследствие чего отсутствует возможность обрабатывать более одного события одновременно. Идеальным решением для этой проблемы может служить возможность выполнения двух или более разделов программы в одно время. Потоки позволяют нам это сделать.

Вот ссылка
d9v4 Уровень 15
5 сентября 2015
Вот весь код если кому интересно
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * Created by de on 29.08.2015.
 */
public class LDgui
{
    static boolean flag = false;
    static boolean flag2 = false;
    private int sec = 0;

    JLabel label;

    public static void main(String[] args)
    {
        LDgui ld = new LDgui();
        ld.go();
        while (true)
        {
            //System.out.println(flag);

            if (flag==true)
            {
                ld.timer();
            }
            //int i = 0;
        }
    }

    public void go()
    {
        JFrame frame = new JFrame();
        JButton b1 = new JButton("h+");
        JButton b2 = new JButton("h-");
        JButton b3 = new JButton("m+");
        JButton b4 = new JButton("m-");
        label = new JLabel();

        b1.addActionListener(new B1());
        b2.addActionListener(new B2());
        b3.addActionListener(new B3());
        b4.addActionListener(new B4());

        JPanel panel = new JPanel();

        //.setSize(200, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setBounds(1700,15,200, 100);
        //frame.setUndecorated(true);
        frame.setVisible(true);

        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.NORTH, label);
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.add(b1);
        panel.add(b2);
        panel.add(b3);
        panel.add(b4);
        viewText();
    }

    private void setTime(int s, boolean p)
    {
        if (p){
            sec+=s;
        }else {
            sec-=s;
        }
        if (sec<0){
            System.out.println("�������");
            sec=0;
khda91 Уровень 39
4 сентября 2015
А почему считаешь, что она не работает? У тебя ведь работает бесконечный цикл.
System.out.println("")
печатает пустую строку в консоль. А так все происходит в фоне и ничего не видно.