Java 线程在 windows 上运行,但在 mac 上运行缓慢且出现故障

Java Thread works on windows but slow and glitches on mac

下面附上的我的代码在 windows 系统上运行良好。然而,在我的 mac 上它不起作用。它从登录屏幕开始,整个过程变慢并出现故障,我无法 select 按钮或退出框架我可以在我的 windows 系统上执行的所有功能任何建议的修复? 我相信这是线程,代码再次在 windows 对应部分上运行得很好,它就在 mac.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class Screen extends JFrame{​​​​

        Screen(String sc){​​​​
                setTitle(sc);
                setSize(1000,600);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(false);
        }​​​​
        public void isVisible(boolean val){​​​​
                setVisible(val);
        }​​​​

}​​​​

public class Index extends Thread{

        static class LoginScreen extends Screen implements ActionListener{
                public LoginScreen(String a){
                        super(a);
                        JButton b = new JButton("Switch");
                        b.addActionListener(this);
                        add(b);   
                }

                public void actionPerformed(ActionEvent e){
                        login = false;
                        home = true;
                }

        }

        static class HomeScreen extends Screen implements ActionListener{
                public HomeScreen(String a){
                        super(a);
                        JButton b = new JButton("Switch");
                        b.addActionListener(this);
                        add(b);    
                }       
                
                public void actionPerformed(ActionEvent e){
                        home = false;
                        login = true;
                }

        }
        static boolean login = true;
        static boolean home = false;

        static LoginScreen ls = new LoginScreen("LoginScreen");
        static HomeScreen hs = new HomeScreen("HomeScreen"); 

        public void screenSetState(HomeScreen hs, LoginScreen ls){
                for(;;){
                        if(login){
                                hs.isVisible(false);
                                ls.isVisible(true);
                        }else if(home){
                                ls.isVisible(false);
                                hs.isVisible(true);
                        }
                }
        }

        public static void main(String ar[]){
                Index mainProg = new Index();
                mainProg.start(); 
        }

        public void run(){
                screenSetState(hs,ls);
        }

}

以上是我文件的附加代码。

问题在于您在线程中所做的事情。

for (ever)
 if(login){
    hs.isVisible(false);
    ls.isVisible(true);
 }else if(home){
    ls.isVisible(false);
    hs.isVisible(true);
 }

这会不断地切换您的登录屏幕和主屏幕。

摆脱循环,你不需要它。将开关放在您希望事件发生的位置。

public void actionPerformed(ActionEvent e){
    super.isVisible(false);
    ls.isVisible(true);
}