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

时间:2015-12-18 09:17:31

标签: java

目前我上了两节课。公共类Start和public class 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());
            }
        }
    });

}

2 个答案:

答案 0 :(得分:4)

为您的支票创建一个方法,将它们全部放在main中是没有意义的。如果您创建静态方法,可以通过以下方式调用它:

Start.check(auswahl);

如果没有,您应该实例化Start。这是你的开始课程:

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");
                        }
                    }
                }
            }
        }
    }
}

}

答案 1 :(得分:0)

我认为前往此处的方式将被称为重构

您有一个控制台应用程序,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-App中:

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

原因,这只是如何攻击这种情况的一般想法。在您的情况下,您必须考虑输入,例如&#34;退出&#34;以及如何处理所以也许最好传递一个PrintStream并返回一个boolean for continue或不:

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