繁体   English   中英

JAVA-从另一个类调用main方法的一部分

[英]JAVA - call a part of the main method from another class

此刻我上了两节课。 公共类Start和公共类Frame_Main。

我通过GUI控制公共类Frame_Main,在其中键入一些内容,然后按一下按钮,以激活ActionListener。 之后,输入将成为控制台中的输出。

通过GUI输入之后,我想调用Start类,并检查输入是否与我准备的某些用户答案相同,但是我找不到一种方法来实现该功能,Eclipse在我总是显示错误尝试创建一个包含函数的公共void或类。

开始:

public class Start {
public static void main(String[] args)
{
 //deleted some variables to make the code look cleaner
 auswahl = frame_main.auswahl;
 //I want to call this while loop 
    while(run){
        System.out.println("Welche Zahl ist vorhanden? \nDual, Hexa, Oktal oder Dezimal?");

        if((auswahl).equals("Dual") || (auswahl).equals("dual"))
        {
            System.out.println("Dual wurde ausgewählt");
            System.out.println("Dezimal: " + dezimalzahlen.dualUmrechnung());
            System.out.println("Oktal: " + oktaldezimalzahlen.dualUmrechnung());
            System.out.println("Hexa: " + hexadezimalzahlen.dualUmrechnung());
            System.out.println("-------------------------");
        }
        else 
        {
            if((auswahl).equals("Hexa") || (auswahl).equals("hexa"))
            {
                System.out.println("Hexa wurde ausgewählt");
                System.out.println("Dezimal: " + dezimalzahlen.hexadezimalUmrechnung());
                System.out.println("Dual: " + dualzahlen.hexadezimalUmrechnung());
                System.out.println("Oktal: " + oktaldezimalzahlen.hexadezimalUmrechnung());
                System.out.println("-------------------------");
            }
            else
            {
                if((auswahl).equals("Oktal") || (auswahl).equals("oktal"))
                {
                    System.out.println("Oktal wurde ausgewählt");
                    System.out.println("Dual: " + dualzahlen.oktaldezimalUmrechnung());
                    System.out.println("Dezimal: " + dezimalzahlen.oktaldezimalUmrechnung());
                    System.out.println("Hexa: " + hexadezimalzahlen.oktaldezimalUmrechnung());
                    System.out.println("-------------------------");
                }
                else
                {
                    if((auswahl).equals("Dezimal") || (auswahl).equals("dezimal") )
                    {
                        System.out.println("Dezimal wurde ausgewählt");
                        System.out.println("Dual: " + dualzahlen.dezimalUmrechnung());
                        System.out.println("Oktal: " + oktaldezimalzahlen.dezimalUmrechnung());
                        System.out.println("Hexa: " + hexadezimalzahlen.dezimalUmrechnung());
                        System.out.println("-------------------------");
                    }
                    else
                    {
                        if((auswahl).equals("Exit") || (auswahl).equals("exit"))
                        {
                            System.out.println("Das Programm wurde beendet.");
                            run = false;
                        }
                        else
                        {
                            System.out.println("Keine Übereinstimmung, bitte erneut versuchen");
                        }
                    }
                }
            }
        }
    }   
}

}

Frame_Main:

public String auswahl = "";
public void createTextField()
{

    jbutton1_go.addActionListener (new ActionListener()
    {
        public void actionPerformed (ActionEvent e)
        {
            if (jtextfield1_bezeichnung.getText().length() <= 0)
            {
                System.out.println("Error 404: Kein Zahlensystem wurde angegeben");
            }
            else
            {
                System.out.println ("Vorhandenes Zahlensystem: " + jtextfield1_bezeichnung.getText());
                auswahl = jtextfield1_bezeichnung.getText();
                //after getting the input value I would like to call the while loop
            }

            if(jtextfield1_zahl.getText().length() <= 0)
            {
                System.out.println("Error 404: Keine Zahl wurde angegeben");
            }
            else
            {
                System.out.println ("Vorhandene Zahl: " + jtextfield1_zahl.getText());
            }
        }
    });

}

为您的检查创建一个方法,将它们全部都保留下来是没有意义的。 如果创建静态方法,则可以通过以下方式调用它:

Start.check(auswahl);

如果没有,您应该实例化启动。 这是您的入门课:

public class Start {

public static void main(String[] args)
{
 //deleted some variables to make the code look cleaner
 auswahl = frame_main.auswahl;

}   


public static check(String auswahl) {
    //I want to call this while loop 
    while(run){
        System.out.println("Welche Zahl ist vorhanden? \nDual, Hexa, Oktal oder Dezimal?");

        if((auswahl).equals("Dual") || (auswahl).equals("dual"))
        {
            System.out.println("Dual wurde ausgewählt");
            System.out.println("Dezimal: " + dezimalzahlen.dualUmrechnung());
            System.out.println("Oktal: " + oktaldezimalzahlen.dualUmrechnung());
            System.out.println("Hexa: " + hexadezimalzahlen.dualUmrechnung());
            System.out.println("-------------------------");
        }
        else 
        {
            if((auswahl).equals("Hexa") || (auswahl).equals("hexa"))
            {
                System.out.println("Hexa wurde ausgewählt");
                System.out.println("Dezimal: " + dezimalzahlen.hexadezimalUmrechnung());
                System.out.println("Dual: " + dualzahlen.hexadezimalUmrechnung());
                System.out.println("Oktal: " + oktaldezimalzahlen.hexadezimalUmrechnung());
                System.out.println("-------------------------");
            }
            else
            {
                if((auswahl).equals("Oktal") || (auswahl).equals("oktal"))
                {
                    System.out.println("Oktal wurde ausgewählt");
                    System.out.println("Dual: " + dualzahlen.oktaldezimalUmrechnung());
                    System.out.println("Dezimal: " + dezimalzahlen.oktaldezimalUmrechnung());
                    System.out.println("Hexa: " + hexadezimalzahlen.oktaldezimalUmrechnung());
                    System.out.println("-------------------------");
                }
                else
                {
                    if((auswahl).equals("Dezimal") || (auswahl).equals("dezimal") )
                    {
                        System.out.println("Dezimal wurde ausgewählt");
                        System.out.println("Dual: " + dualzahlen.dezimalUmrechnung());
                        System.out.println("Oktal: " + oktaldezimalzahlen.dezimalUmrechnung());
                        System.out.println("Hexa: " + hexadezimalzahlen.dezimalUmrechnung());
                        System.out.println("-------------------------");
                    }
                    else
                    {
                        if((auswahl).equals("Exit") || (auswahl).equals("exit"))
                        {
                            System.out.println("Das Programm wurde beendet.");
                            run = false;
                        }
                        else
                        {
                            System.out.println("Keine Übereinstimmung, bitte erneut versuchen");
                        }
                    }
                }
            }
        }
    }
}

}

我认为去这里的方式叫做重构

您有一个带有main()控制台应用程序,该应用程序将输出打印到System.out

现在您要转到GUI, 并且不能重用您的代码,因为System.out在GUI应用程序中没有位置。

现在,两者有什么共同点?

他们共享一种方法,您可以在其中输入一些数据,然后打印出一些结果。

考虑以下方法:

 public String showUmrechnungen(String auswahl, String zahl) {
    StringWriter sw = new StringWriter();
    PrintWriter out = new PrintWriter();

    //Your code from main(). Replace System.out.println with out.println()

    out.flush();
    return sw.toString();
 }

您可以在两种情况下都使用它:

 public static void main(String[] args) {
   Start instance = new Start();  
   while(running) {
      //Get the input
      String zahl = readZahl();
      String auswahl = readAuswahl();

      System.out.println(instance.showUmrechnungen(auswahl, zahl));        
   }
 }

在您的Swing应用程序中:

 public void actionPerformed (ActionEvent e)
    {
       Start instance = new Start();
       JOptionPane.showMessageDialog(Frame_Main.this, 
           instance.showUmrechnungen(jtextfield1_bezeichnung.getText(),
                jtextfield1_zahl.getText()));                              
    }

当然,这只是如何应对这种情况的一般思路 在您的情况下,您必须考虑“退出”之类的输入以及如何处理。 因此,也许最好传入一个PrintStream并返回一个布尔值以继续或不继续:

 public boolean showUmrechnungen(String auswahl, String zahl, PrintStream out) {
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM