当前位置: 首页 > 面试题库 >

如何在不等待用户的Gui输入的情况下停止Java运行整个代码

虞航
2023-03-14
问题内容

我是Java的新手,我只是在寻求一点帮助。
我试图创建一个程序,允许用户输入gui的名称和>>百货商店的位置。它允许这样做,但是程序不等待输入>
details,它只是初始化Gui类,并简单地继续执行> processing,这是将输入Gui的细节添加到数组列表中。但是尚未输入>
details,因此它正在创建一个空值,因为它已经向前跳了。

那么如何使它停止并等待直到输入值然后提交呢?

这是代码的Gui组件:

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

public class guiDepartment extends JFrame
{



    private String  depName;
    private String  depLocation;
    private static Department newDepartment;
    private JTextField departmentDetails1;
    private JTextField departmentDetails2;
    private JTextField departmentDetails3;


    private Employee worksInInTheDepartment;


    public guiDepartment()
    {
        System.out.println("bob the builder ");

        JButton submit;
        JButton b1;


        JFrame frame = new JFrame();

        departmentDetails1 = new JTextField(10);


        departmentDetails2 = new JTextField(10);


        departmentDetails3 = new JTextField(10);


        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(320, 75));
        frame.setTitle("Department Details");

        frame.setLayout(new FlowLayout());

        frame.add(new JLabel("Please enter department Name: "));
        frame.add(departmentDetails1);
        ButtonListenerDepName dListener = new ButtonListenerDepName();
        System.out.println(depName);

        frame.add(new JLabel("Please enter department location: "));
        frame.add(departmentDetails2);
        ButtonListenerDepName1 dListener1 = new ButtonListenerDepName1();




        b1  = new JButton  ("Submit");

        ButtonListener listener = new ButtonListener();
        b1.addActionListener(listener);
        b1.addActionListener(dListener);
        b1.addActionListener(dListener1);
        frame.add(b1);
        frame.pack();
        frame.setSize(300,300);
        frame.setVisible(true);



    }

    public class ButtonListenerDepName implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            depName = departmentDetails1.getText(); 
            System.out.println("and This is the departments name :"+ depName);      
        } 
    }

    public class ButtonListenerDepName1 implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            depLocation = departmentDetails2.getText(); 
            System.out.println("and This is the departments location :"+ depLocation);  
        } 
    }


    public class ButtonListener implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            //create a new department and then adds it to thee system
            newDepartment = new Department(depName, depLocation);
        } 
    }

    public static Department getDepartment()
    {
        return newDepartment;
    }
}

>>and this is the Main class

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



public class MainWelcomeGui1 
{

        JFrame frame = new JFrame();

        JButton b1  ;   
        JButton b2  ; 
        JButton b3  ; 
        JButton b4  ;
        JButton b5  ;
        JButton b6  ;
        JButton b7  ;
        JButton b8  ;
        JButton b9  ;
        JButton b10 ;
        JButton b11 ;
        JButton b12 ;

        private String  fName;
        private String  sName;
        private String  gender;
        private String  pLevel;
        private String  empIDnumber;
        private int     dPayLevel;

        private static  ArrayList<Employee> allEmployees = new ArrayList<Employee>(); 
        private static  ArrayList<Department> allDepartments = new ArrayList<Department>();




    public MainWelcomeGui1()
    {
        frame.setTitle("Human Resources allocation screen");


        JLabel  hdr = new JLabel ("Welcome to the Human Resources employee control system");


         b1  = new JButton  ("Add a new department");
         ButtonListener listener = new ButtonListener();
         b1.addActionListener(listener);
        // addDepartmentToSystem();

         b2  = new JButton  ("Add a new employee to the system");
         ButtonListener listener1 = new ButtonListener();
         b2.addActionListener(listener1);

         b3  = new JButton  ("Alter a employees details");
         ButtonListener listener2 = new ButtonListener();
         b3.addActionListener(listener2);

         b4  = new JButton  ("Add a employee to a department of my choice");
         ButtonListener listener3 = new ButtonListener();
         b4.addActionListener(listener3);

         b5  = new JButton  ("Assign a employee to a department");
         b6  = new JButton  ("Designate a employee as department head");
         b7  = new JButton  ("Delete a department");
         b8  = new JButton  ("To delete an employee from the system");
         b9  = new JButton  ("To see a list of all employees assigned to a particular department");
         b10 = new JButton  ("To see the amounts needed to be paid fortnightly");
         b11 = new JButton  ("To chane an employees pay level");
         b12 = new JButton  ("To change an employees name");
        frame.setLayout (new GridLayout (6, 6));

        frame.setBackground  (Color.green);


        frame.add(hdr,BorderLayout.NORTH);

        frame.add (b1);
        frame.add (b2);
        frame.add (b3);
        frame.add (b4);
        frame.add (b5);
        frame.add (b6);
        frame.add (b7);
        frame.add (b8);
        frame.add (b9);
        frame.add (b10);
        frame.add (b11);
        frame.add (b12);


        frame.setSize(400, 100);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        new MainWelcomeGui1();

    }

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            if (e.getSource() == b1)
            {
                guiDepartment guiDepartment = new guiDepartment();
                System.out.println("i should really come after bob the builder");
                addDepartmentToSystem();    
            } 
            else if (e.getSource() == b2)  
            {   
                guiEmployee1 theGuiEmployee = new guiEmployee1();   
            }
            else if (e.getSource() == b3)
            {
                System.out.println("hello1 button 2");
            }
            else if (e.getSource() == b4)
            {
                System.out.println("hello button 3");
            }   
                else if (e.getSource() == b5)  
            {   
                guiEmployee1 theGuiEmployee = new guiEmployee1();   
            }
            else if (e.getSource() == b6)
            {
                System.out.println("hello1 button 2");
            }
            else if (e.getSource() == b7)
            {
                System.out.println("hello button 3");
            }


        } 
    }

    public  void addDepartmentToSystem()
    {

        Department departmentToAdd = new Department("berel","sam") ;

        System.out.println("to two");

        System.out.println(departmentToAdd);

        departmentToAdd = guiDepartment.getDepartment();

        System.out.println("got to three");

        allDepartments.add(departmentToAdd);

        System.out.println("to four+");

        System.out.println(allDepartments);
    }

}

问题答案:

您不应该让JFrame启动其他JFrame,尤其是如果您希望子窗口充当模式对话框时,这种对话框会在启动窗口中暂停代码,直到完全处理完为止。如果是这样的话,使对话窗口
对话框 在地方JFrames的对话窗口的使用模式JDialogs。

例如:

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

public class MainWelcomeGui2 {
   public static void main(String[] args) {
      final JFrame frame = new JFrame("Main GUI");

      JButton addDeptButtonLaunchJFrame = new JButton(
            "Add a New Department, Launch JFrame");
      JButton addDeptButtonLaunchJDialog = new JButton(
            "Add a New Department, Launch JDialog");

      addDeptButtonLaunchJDialog.addActionListener(new LaunchJDialogListener(
            frame));
      addDeptButtonLaunchJFrame.addActionListener(new LaunchJFrameListener());

      JPanel panel = new JPanel();
      panel.add(addDeptButtonLaunchJDialog);
      panel.add(addDeptButtonLaunchJFrame);

      frame.add(panel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);

   }
}

class LaunchJDialogListener implements ActionListener {
   JDialog dialog;

   public LaunchJDialogListener(JFrame parentFrame) {
      JButton doneButton = new JButton(new AbstractAction("Done") {
         public void actionPerformed(ActionEvent e) {
            dialog.dispose();
         }
      });

      JPanel panel = new JPanel();
      panel.setPreferredSize(new Dimension(100, 100));
      panel.add(doneButton);

      dialog = new JDialog(parentFrame, "Dialog", true);
      dialog.add(panel);
      dialog.pack();
      dialog.setLocationRelativeTo(null);
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      System.out.println("called before setting dialog visible");
      dialog.setVisible(true);
      System.out
            .println("called after setting dialog visible. Note that this line doesn't show until the dialog disappears");
   }
}

class LaunchJFrameListener implements ActionListener {
   JFrame frame;

   public LaunchJFrameListener() {
      JButton doneButton = new JButton(new AbstractAction("Done") {
         public void actionPerformed(ActionEvent e) {
            frame.dispose();
         }
      });

      JPanel panel = new JPanel();
      panel.setPreferredSize(new Dimension(100, 100));
      panel.add(doneButton);

      frame = new JFrame("JFrame");
      frame.add(panel);
      frame.pack();
      frame.setLocationRelativeTo(null);
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      System.out.println("called before setting frame visible");
      frame.setVisible(true);
      System.out
            .println("called after setting frame visible.  Note that this line shows up immediately.");
   }
}


 类似资料:
  • null 所以我面临一个问题,如果打开,等待输入,如何停止它?我尝试过将它放在线程中并或使用作为标志,但它并没有停止

  • 问题内容: 我在Docker容器上安装了Nginx,并且正在尝试像这样运行它: 问题在于Nginx的工作方式,即初始进程会立即产生一个主要的Nginx进程和一些工作程序,然后退出。由于Docker仅监视原始命令的PID,因此容器将暂停。 如何防止容器停止?我需要能够告诉它绑定到第一个子进程,或者阻止Nginx的初始进程退出。 问题答案: 像所有行为良好的程序一样,可以配置为不自我守护。 使用htt

  • 问题内容: 我有以下代码: 在发生某些事件之后,我应该停止在的方法中声明的操作,该方法实现。 我怎样才能做到这一点?我无法关闭执行器,只能撤消我的定期任务。我可以用吗?如果可以的话,请告诉我它将如何工作。 问题答案: 使用。该是你的任务的处理。您需要取消此任务,它将不再执行。 实际上,是签名,并将其与参数一起使用将导致当前正在运行的执行线程被调用中断。如果线程在阻塞的可中断调用(例如)中等待,则会

  • 问题内容: 我必须为计算机科学课做一个项目。问题是: 图书馆的顾客最多可以借三本书。因此,一个顾客有一个名字和最多三本书。一本书有作者和书名。设计并实现两个类,分别是Patron和Book,以表示这些对象和以下行为: 客户可以实例化带有标题和作者的书 客户可以检查但不能修改书名或作者 客户可以向顾客询问是否借用了给定的书(按书名识别)。 客户可以告诉顾客退还给定的书(按书名识别)。 客户可以告诉顾

  • 我正在尝试为我的频道制作IRC机器人。我希望机器人能够从控制台接收命令。为了让主循环等待用户输入内容,我添加了循环: 这似乎不起作用。我听说过BufferedReader,但我从未使用过,也不确定这是否能解决我的问题。

  • 为此,我创建了一个名为的单例。这个类处理所有的输入阅读内容。我创建了一个名为的方法,它将回调作为参数。在这个方法中,我创建了一个新线程,并在其中等待使用的输入。这个类还有方法,它向上面描述的线程发送中断消息。下面是该类的当前实现: 这个代码极不可靠。我一会儿就告诉你我的意思。我制作了一个名为Client的玩具类,在中,我用计时器模拟了消息收入。 以下是它的工作原理: 我知道这个问题非常长(也许是不