回到主要班级 [英] Going back to main class

查看:142
本文介绍了回到主要班级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里我有我的终端项目,在终端内部,我可以输入创建,这将带我进入创建提示,在那里我可以创建一个程序。我现在的问题是我无法返回Main类(我可以选择一个命令来运行)。我有想法尝试使用System.exit(0);但是,正如我没有意识到的那样,它只会杀死整个程序。如果有人能帮助我,我的文件在下面。如果需要,我可以发布任何其他文件。

Here I have my terminal project, and inside the terminal, I can type "create", which will take me to the create prompt, where I can create a program. My problem right now is the fact that I can't get back to the Main class (Where I can select a command to run). I had the idea of trying to use the System.exit(0); but, as I didn't realise, it just kills the entire program. If anyone is able to help me, my file is below. I can post any other files if requested.

import java.util.*;
import java.io.*;

public class commandCreate {
    boolean _active = true;
   String _username = System.getProperty("user.name").toLowerCase();
   String _os = System.getProperty("os.name").trim().toLowerCase();
   String fileName, create, option;

    public commandCreate() {
        try {
         while(_active) {
            System.out.print(_username + "@" + _os + ":~/create$ ");
            Scanner kbd = new Scanner(System.in);
                String userLine = kbd.nextLine();

            if(java.util.regex.Pattern.matches(".*\\S\\s+\\S.*", userLine)) {
                    Scanner read = new Scanner(userLine);
                        option = read.next();
                        fileName = read.next();
            }

            FileWriter create = new FileWriter(new File("Created Files/" + fileName + ".java"));

            if(userLine.equals(option + " " + fileName)) {
                if(option.equals("-a")) {
                    // Option = -a, creates standard file with main class.
                    create.write("public class " + fileName + " {\n");
                    create.write("  public static void main(String[] args) {\n");
                    create.write("      System.out.println(\"Welcome to your new program!\");\n");
                    create.write("  }\n");
                    create.write("}");
                } else if(option.equals("-c")) {
                    // Option = -c , creates standard file with overloaded constructor & main class.
                    create.write("public class " + fileName + " {\n");
                    create.write("  public " + fileName + "() {\n");
                    create.write("      System.out.println(\"Welcome to your new program!\");\n");
                    create.write("  }\n");
                    create.write("\n");
                    create.write("  public static void main(String[] args) {\n");
                    create.write("      new " + fileName + "();\n");
                    create.write("  }\n");
                    create.write("}");
                } else if(option.equals("-j")) {
                    // Option = -j, creates GUI within constructor w/ single JLabel.
                    create.write("import javax.swing.*;\n");
                    create.write("import java.awt.*;\n");
                    create.write("import java.awt.event.*;\n");
                    create.write("\n");
                    create.write("public class " + fileName + " extends JFrame {\n");
                    create.write("  private static final int HEIGHT = 50;\n");
                    create.write("  private static final int WIDTH = 400;\n");
                    create.write("\n");
                    create.write("  private JLabel welcomeJ;\n");
                    create.write("\n");
                    create.write("  public " + fileName + "() {\n");
                    create.write("    super(\"Welcome to your program - " + fileName + "\");\n");
                    create.write("      Container pane = getContentPane();\n");
                    create.write("    setLayout(new FlowLayout());\n");
                    create.write("\n");
                    create.write("      welcomeJ = new JLabel(\"Welcome To Your Program!\", SwingConstants.CENTER);\n");
                    create.write("\n");
                    create.write("      pane.add(welcomeJ);\n");
                    create.write("\n");
                    create.write("     setSize(WIDTH, HEIGHT);\n");
                    create.write("     setVisible(true);\n");
                    create.write("     setResizable(false);\n");
                    create.write("     setDefaultCloseOperation(EXIT_ON_CLOSE);\n");
                    create.write("  }\n");
                    create.write("\n");
                    create.write("  public static void main(String[] args) {\n");
                    create.write("      new " + fileName + "();\n");
                    create.write("  }\n");
                    create.write("}");
                }
            } else if(userLine.equalsIgnoreCase("help")) {
                System.out.println("Commands");
                System.out.println("  Syntax: [-option] [filename]");
                System.out.println("      -a [filename]      [Program: main class]");
                System.out.println("      -c [filename]      [Program: overloaded constructor, main class]");
                System.out.println("      -j [filename]      [Program: GUI: overloaded constructor, main class]");
            } else if(userLine.equalsIgnoreCase("exit")) {
                System.exit(0);
            } else {
                System.out.println("Error in syntax. Please review the \"help\" menu");
            }
            create.close();
         }
        } catch(IOException e) {
            System.out.println("There was an error: " + e);
        } catch(InputMismatchException ex) {
            System.out.println("There was an error: " + ex);
        }
    }

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


推荐答案

简单的答案是让 commandCreate 构造函数返回,或抛出/传播异常。实际上,我认为如果用户输入EOF,这种情况就已经发生了。

The simple answer is to get the commandCreate constructor to return, or throw / propagate an exception. Indeed, I think this will happen already if the user enters an EOF.

(你的代码还有很多其他问题,但如果你认为这样做可能会更好但是我会指出,commandCreate或CommandCreate对于类名来说是一个非常糟糕的选择。类名通常是名词。)

(There are numerous other things wrong with your code, but it is probably better if you figure that out for yourself. I will point out however, that "commandCreate" or "CommandCreate" is a really poor choice for a class name. A class name is typically a noun.)

这篇关于回到主要班级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆