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

8nuwlpux  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(290)

下面附上的代码在windows系统上运行得非常好。但是在我的mac电脑上它就是不工作。它开始在登录屏幕和整个事情只是放慢和小故障了,我无法选择按钮或退出框架所有功能,我可以在我的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);
        }

}

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

yb3bgrhw

yb3bgrhw1#

问题是你在线程中做什么。

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);
}

相关问题