Java setVisible(true)不工作

Java setVisible(true)不工作,java,jframe,Java,Jframe,嗯,我正在编写一个计时器,至少我在尝试,我的代码运行得非常好。 我的代码中有3个类:主类、设置计时器的帧和计时器停止的另一帧。现在,我的代码工作得很好,直到我在倒数计时的第二帧中编写System.out.println,然后第一帧就停止显示,甚至我删除了System.out.println。 有人能帮我吗 主要类别: package timer; public class Main { static Timer T = new Timer(); public static vo

嗯,我正在编写一个计时器,至少我在尝试,我的代码运行得非常好。 我的代码中有3个类:主类、设置计时器的帧和计时器停止的另一帧。现在,我的代码工作得很好,直到我在倒数计时的第二帧中编写System.out.println,然后第一帧就停止显示,甚至我删除了System.out.println。 有人能帮我吗

主要类别:

package timer;

public class Main {
    static Timer T = new Timer();
    public static void main (String[] args){
        Topen();
    }

    public static void Tclose(){
        T.setVisible(false);
    }

    public static void Topen(){
        T.setVisible(true);
    }
}
其他类有点长,但它们都是JFrame

编辑:以下是其他类第二帧尚未完成:

第一帧计时器:

public class Timer extends JFrame {
    private static final long serialVersionUID = 1L;

    private static final String title = "Timer";
    private static final int WIDTH = 600;
    private static final int HEIGHT = 400;
    int H2;
    int min2;
    int sec2;

    static ActualTimer AT = new ActualTimer();

    JPanel setTimerPanel = new JPanel();
    JPanel buttonsPanels = new JPanel();

    JButton start = new JButton("start timer");
    JButton exit = new JButton("exit");

    JLabel points = new JLabel(":");
    JLabel points2 = new JLabel(":");
    JTextField H = new JTextField("00");
    JTextField min = new JTextField("00");
    JTextField sec = new JTextField("00");

    public Timer() {
        super(title);
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        exit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        start.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                H2 = Integer.parseInt(H.getText());
                min2 = Integer.parseInt(min.getText());
                sec2 = Integer.parseInt(sec.getText());
                AT.H2 = H2;
                AT.min2 = min2;
                AT.sec2 = sec2;
                H2 = 0;
                min2 = 0;
                sec2 = 0;
                H.setText(""+H2);
                min.setText(""+min2);
                sec.setText(""+sec2);

                AT.H.setText(""+AT.H2);
                AT.min.setText(""+AT.min2);
                AT.sec.setText(""+AT.sec2);

                Main.Tclose();
                openAT();
                AT.nanosec = System.nanoTime();
                AT.start = true;
            }
        });

        buttonsPanels.add(start);
        buttonsPanels.add(exit);
        setTimerPanel.add(H);
        setTimerPanel.add(points);
        setTimerPanel.add(min);
        setTimerPanel.add(points2);
        setTimerPanel.add(sec);
        add(setTimerPanel, BorderLayout.NORTH);
        add(buttonsPanels, BorderLayout.SOUTH);
    }

    public static void openAT(){
        AT.setVisible(true);
    }

    public static void closeAT(){
        AT.setVisible(false);
    }

}
第二个框架不,我不觉得名字有创意:

public class ActualTimer extends JFrame implements Runnable{
    private static final long serialVersionUID = 1L;

    private static final String title = "Timer";
    private static final int WIDTH = 600;
    private static final int HEIGHT = 400;

    Thread thread = new Thread(this);

    long nanosec;
    long remaining = 0;

    public static boolean start = false;

    int H2;
    int min2;
    int sec2;

    JPanel p = new JPanel();

    JButton restart = new JButton("restart timer");
    JButton exit = new JButton("exit");

    JLabel points = new JLabel(":");
    JLabel points2 = new JLabel(":");
    JTextField H = new JTextField("00");
    JTextField min = new JTextField("00");
    JTextField sec = new JTextField("00");

    public ActualTimer() {
        super(title);
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        exit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        restart.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Timer.closeAT();
                Main.Topen();
                start = false;

            }
        });

        p.add(H);
        p.add(points);
        p.add(min);
        p.add(points2);
        p.add(sec);
        add(p);

        while(true){
            if(start){
                thread.start();
                continue;
            }
        }
    }

    @Override
    public void run() {
        int go = 0;
        if(System.nanoTime() - nanosec + remaining > 1000000000){
            go++;
            remaining = System.nanoTime() - nanosec;
            nanosec = System.nanoTime();

        }
        while(go>0){
            sec2--;
            if(Integer.parseInt(sec.getText()) > -1)
                sec.setText(""+sec2);
            else{
                sec2+=60;
                min2--;
                sec.setText(""+sec2);
                if(Integer.parseInt(min.getText()) > -1)
                     min.setText(""+min2);
                else
                    min2+=60;
                    H2--;
                    min.setText(""+sec2);
                    if(Integer.parseInt(H.getText()) > -1)
                        H.setText(""+H2);
                    else
                        JOptionPane.showMessageDialog(null, "the timer has stopped");
                        thread.stop();
        }
        }
    }
}

我很清楚第二帧中run方法中的问题,当问题开始时,我正要更改它。

您应该显示计时器类的代码考虑提供一个示例来演示您的问题。这将减少混乱和更好的响应框架只是没有出现,没有发生任何事情