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);
}
下面附上的我的代码在 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);
}