Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在单击按钮时再次运行程序?_Java_Swing_Jframe_Reload - Fatal编程技术网

Java 在单击按钮时再次运行程序?

Java 在单击按钮时再次运行程序?,java,swing,jframe,reload,Java,Swing,Jframe,Reload,因此,当dialogResult为0(yes选项)时,我需要程序重新生成一个新的随机数(Zahl)。我认为重新启动该计划将是实现这一目标的一种方式。我尝试使用System.exit(0)关闭JFrame,然后将可见性设置为true(f.setVisible(true))。那没用,画面也没再出现。我还尝试了SwingUtilities.updateComponentTreeUI(f);,f、 重新验证();和f.repaint(),都不起作用 是否有其他方法“重新加载”JFrame,或者只生成一个

因此,当dialogResult为0(yes选项)时,我需要程序重新生成一个新的随机数(Zahl)。我认为重新启动该计划将是实现这一目标的一种方式。我尝试使用System.exit(0)关闭JFrame,然后将可见性设置为true(f.setVisible(true))。那没用,画面也没再出现。我还尝试了SwingUtilities.updateComponentTreeUI(f);,f、 重新验证();和f.repaint(),都不起作用

是否有其他方法“重新加载”JFrame,或者只生成一个新的随机数更好

提前谢谢

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.util.Random;
    
    public class Zahlenraten{
        static int i = 0;
        public static void main(String[] args) {
            
            JFrame f = new JFrame("Zahlenraten");
            f.setSize(500,500);
            //f.setLayout(null);
            
            JTextField t = new JTextField("");
            t.setBounds(95,10,150,30);
            f.addWindowFocusListener(new WindowAdapter() {
             
                public void windowGainedFocus(WindowEvent e) {
                    t.requestFocusInWindow();
                }
            });
            
            
            JButton e = new JButton("Exit");
            e.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                System.exit(0);
                }
            });
            e.setBounds(300, 100, 100, 30);
            
            JLabel txt = new JLabel("Zahl eingeben:");
            txt.setBounds(10,10,150,30);
            
            Random r = new Random();
            int Zahl = r.nextInt(100-0+1);
            
            
            
            JButton b = new JButton("Prüfen");
            f.getRootPane().setDefaultButton(b);//Enter Key = button b
            b.addActionListener(evt -> { //statt evt könnte man natürlich auch actionPerformed... nehmen.
                 i++;
                 
                 String str = t.getText();
                 int wert = Integer.parseInt(str);
                 t.setText("");
                 
                 if(wert > Zahl) {
                     System.out.println("Der gesuchte Wert ist kleiner.");
                 }
                 if(wert < Zahl) {
                     System.out.println("Der gesuchte Wert ist größer.");
                 }
                 if(wert == Zahl) {
                     System.out.println("Der gesuchte Wert wurde gefunden! Du hast "+i+" Versuche gebraucht.");
                     int dialogResult = JOptionPane.showConfirmDialog(null, "Wollen Sie noch eine Runde spielen?","Frage",JOptionPane.YES_NO_OPTION);
                     if(dialogResult==0) {
                         
                     }else {
                         System.exit(0);
                     }
                 }
            });
            b.setBounds(10,100,100,30);
            
            JPanel p = new JPanel();
            p.setLayout(null);
            p.add(b);
            p.add(e);
            p.add(t);
            p.add(txt);
            f.add(p);
            f.setVisible(true);

            
        }
    }
import javax.swing.*;
导入java.awt.event.ActionListener;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.awt.Toolkit;
导入java.awt.event.ActionEvent;
导入java.util.Random;
公共类Zahlenraten{
静态int i=0;
公共静态void main(字符串[]args){
JFrame f=新JFrame(“Zahlenraten”);
f、 设置大小(500500);
//f、 setLayout(空);
JTextField t=新的JTextField(“”);
t、 立根数(95,10150,30);
f、 addWindowFocusListener(新的WindowAdapter(){
公共无效windowGainedFocus(WindowEvent e){
t、 requestFocusInWindow();
}
});
JButton e=新JButton(“退出”);
e、 addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
系统出口(0);
}
});
e、 立根(30010010030);
JLabel txt=新的JLabel(“Zahl-eingeben:”);
txt.setBounds(10,10150,30);
随机r=新随机();
int-Zahl=r.nextInt(100-0+1);
JButton b=新JButton(“Prüfen”);
f、 getRootPane().setDefaultButton(b);//输入键=按钮b
b、 addActionListener(evt->{//statt evt könnte man natürlich auch actionPerformed…内曼。
i++;
String str=t.getText();
int-wert=Integer.parseInt(str);
t、 setText(“”);
如果(wert>Zahl){
System.out.println(“Der gesuchte Wert ist kleiner.”);
}
如果(wert
目前,当你想倒车时,你的方法就像关闭汽车发动机一样——这种方法显然是不必要的,因为你可以在不重新启动汽车的情况下换档

您需要将逻辑和UI分为两个单独的类。将UI视为远程控件,将包含逻辑的类视为执行从UI接收的命令的引擎。UI类创建引擎类的实例

engine类运行一个游戏循环,该循环将继续运行,直到您告诉它停止为止,因此在编程术语中,您的程序具有以下状态:游戏正在进行中,或者游戏未进行中

boolean imGange = true;
boolean ratenFalsch = true;

while(imGange)
{
    // generate random number
    
    while(ratenFalsch)
    {
        // ask for a guess
        // if the guess is correct
            // print message: right
            ratenFalsch = false;
        // if the guess is incorrect
            // print message: wrong
    }
    // ask user to play again
    // if no
        imGange = false; // game will end, but the program will still be running
}
在构建UI之前,确保引擎正常运行,并且可以通过控制台玩游戏。当游戏正常运行时,您必须将UI中的按钮映射到引擎中的方法。例如,您的UI有一个按钮“Neu-Spiel”,它从引擎调用相应的方法,例如,
mainLoop()
,其中我上面概述的所有逻辑都包含在名为
mainLoop
的方法中


以这种方式组织代码意味着只要UI在运行,引擎就在运行。使用主循环意味着您可以随时启动一个新游戏,而无需停止和启动UI,并且您将在每场游戏中获得一个新的随机数。

目前,你的方法就像在你想倒车的时候关掉汽车引擎——这种方法显然是不必要的,因为你可以在不重启汽车的情况下换挡

您需要将逻辑和UI分为两个单独的类。将UI视为远程控件,将包含逻辑的类视为执行从UI接收的命令的引擎。UI类创建引擎类的实例

engine类运行一个游戏循环,该循环将继续运行,直到您告诉它停止为止,因此在编程术语中,您的程序具有以下状态:游戏正在进行中,或者游戏未进行中

boolean imGange = true;
boolean ratenFalsch = true;

while(imGange)
{
    // generate random number
    
    while(ratenFalsch)
    {
        // ask for a guess
        // if the guess is correct
            // print message: right
            ratenFalsch = false;
        // if the guess is incorrect
            // print message: wrong
    }
    // ask user to play again
    // if no
        imGange = false; // game will end, but the program will still be running
}
在构建UI之前,确保引擎正常运行,并且可以通过控制台玩游戏。当游戏正常运行时,您必须将UI中的按钮映射到引擎中的方法。例如,您的UI有一个按钮“Neu-Spiel”,它从引擎调用相应的方法,例如,
mainLoop()
,其中我上面概述的所有逻辑都包含在名为
mainLoop
的方法中

以这种方式组织代码意味着只要UI在运行,引擎就在运行