[英]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.