gpt4 book ai didi

java - sleep 暂停整个线程

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:16 25 4
gpt4 key购买 nike

我知道我的代码不像是按照 java 约定编写的,但这只是一个小测试......我的 MainNF 类中有一个 JFrame。该 JFrame 应显示然后消失一段时间,该时间在 JTextField jtf 中输入,同时出现另一个帧(NFrame frameZero)。之后,它应该再次出现并且frameZero应该消失。所以我只需要代码来暂停我的方法一段时间。

我的问题:如果尝试使用Thread.sleep(),但这里的问题是整个线程然后 hibernate ,所以NFrame frameZero此时不执行任何操作。我也用 wait() 方法尝试过,这也不起作用。

我的代码:

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

public class MainNF{

public static void main(String[]args){
MainNF m=new MainNF();
}

JTextField jtf;
JFrame j;
JPanel acd;
JPanel [] eingabe;
JButton play;
int letzterScore;

public MainNF(){
j=new JFrame("Menue");
acd=new JPanel();
letzterScore=0;
acd.add(new JLabel("Letzter Score: "+letzterScore));
j.add(acd);

eingabe=new JPanel[2];
eingabe[0]=new JPanel();
eingabe[1]=new JPanel();
eingabe[1].setLayout(new BoxLayout(eingabe[1], BoxLayout.Y_AXIS));
eingabe[1].add(new JLabel("Sekunden fuer das naechste Spiel"));
jtf=new JTextField();
eingabe[1].add(jtf);
eingabe[0].setLayout(new BoxLayout(eingabe[0], BoxLayout.X_AXIS));
eingabe[0].add(eingabe[1]);
play=new JButton("Los!");
play.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){
j.setVisible(false);
letzterScore=play(getPlaytime());
j.setVisible(true);
}});
eingabe[0].add(play);
j.add(eingabe[0]);
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setBounds(200, 200, 400, 400);
j.setVisible(true);
}

public int play(){
NFrame frameZero=new NFrame();
try{
Thread.sleep(getPlaytime());
}
catch(InterruptedException e){}
frameZero.setAllInvisible();
return frameZero.amount();
}

public int getPlaytime(){
return Integer.parseInt(jtf.getText());
}

}

最后我用计时器尝试了它,但根本没有暂停任何事情:

public int play(){
NFrame frameZero=new NFrame();
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {

}};
Timer t = new Timer(getPlaytime(), taskPerformer);
t.setRepeats(false);
t.start();
frameZero.setAllInvisible();
return frameZero.amount();
}

所以我不知道该怎么办......如果你能帮助我,我会爱你<3

最佳答案

public int play() 是从事件调度线程的上下文中调用的,这会阻止它处理重绘请求和新事件等。

改用 Swing Timer,请参阅 How to use Swing Timers了解更多详情

您也可以考虑查看 Concurrency in SwingThe Use of Multiple JFrames, Good/Bad Practice?

关于java - sleep 暂停整个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com