Я знаю, что мой код не похож на написанный после java-соглашений, но его просто небольшой тест... У меня есть JFrame в моем классе MainNF. Этот JFrame должен отображаться, а затем исчезать на некоторое время, которое вводится в JTextField jtf, в то время как появляется другой фрейм, NFrame frameZero. После этого он должен появиться снова, и frameZero должен исчезнуть. Поэтому мне просто нужен код, который приостанавливает мой метод на некоторое время.
Моя проблема: если вы попытались использовать Thread.sleep(), но проблема здесь в том, что весь Thread затем спит, поэтому 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()
вызывается из контекста Event Dispatching Thread, что мешает ему, среди прочего, обрабатывать запросы на перерисовку и новые события.
Вместо этого используйте Swing Timer
, см. Раздел "Как использовать таймеры Swing" для получения более подробной информации.
Вы также можете рассмотреть возможность использования параллелизма в Swing и использовании нескольких JFrames, хорошей/плохой практики?