2017-05-14 3 views
2

Ich arbeite dieses Semester an Projekt an meiner Universität.Ich habe 3 Methoden gemacht, die gut funktionierten, bis ich JButtons hinzufügte. Ich rufe sie durch diese buttons.These Methoden warten Eingabe von der Benutzer (ich benutze Scanner für das und ich habe auch versucht BufferReader), aber jetzt hört das Programm einfach zu laufen und ich kann nicht am Terminal schreiben.Auch bekomme ich keine Art von Fehler von der BlueJ.Hier ist der Code für der JButtons:JButtons-kann keine Eingabe geben

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

public class Window extends JFrame implements ActionListener { 

JButton b1 = new JButton("Load from file"); 
JButton b2 = new JButton("Save to file"); 
JButton b3 = new JButton("Add hotel and resrvations"); 
JButton b4 = new JButton("Search hotel by id"); 
JButton b5 = new JButton("Search reservation by name"); 

Main m0 = new Main(); 

public Window(Main main0) { 
    super("Management");//Name 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


    b1.addActionListener(this); 
    b2.addActionListener(this); 
    b3.addActionListener(this); 
    b4.addActionListener(this); 
    b5.addActionListener(this); 

    FlowLayout flow = new FlowLayout(); 
    setLayout(flow); 


    add(b1); 
    add(b2); 
    add(b3); 
    add(b4); 
    add(b5); 
    pack(); 

    setVisible(true); 

    m0 = main0; 
} 

public void actionPerformed(ActionEvent ae) { 
    Object source = ae.getSource(); 
    if(source == b1) { 
     m0.loadFile(); 

    }else if(source == b2) { 
     m0.saveFile(); 

    }else if(source == b3) {    
     m0.addHotel(); 

    }else if(source == b4) {    
     m0.searchById(); 

    }else if(source == b5) {    
     m0.searchByName();  
    } 
}} 

ein vereinfachten Code, die

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

public class Window extends JFrame implements ActionListener { 

JButton b1 = new JButton("Get input"); 
Main m0 = new Main(); 

public Window(Main main0) { 
    super("Management"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    b1.addActionListener(this); 

    FlowLayout flow = new FlowLayout(); 
    setLayout(flow); 
    add(b1); 

    pack(); 

    setVisible(true); 

    m0 = main0; 
} 

public void actionPerformed(ActionEvent ae) { 
    Object source = ae.getSource(); 
    if(source == b1) { 
     m0.userInput(); 

    } 
} 
zum gleichen Problem führt,

}

Und eine einfache Haupt

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

    public class Main{ 

    public void userInput(){ 
     Scanner scan = new Scanner(System.in); 

     System.out.println("Give hotel's name : "); 
     String name = scan.nextLine(); 

     System.out.println(name); 
    } 

    public static void main(){   
     Main m0 = new Main(); 
     Window w = new Window(m0); 
    } 
} 

Das Problem bei den drei letzten methods.These Methoden an dem Haupt class.Thanks für Ihre Zeit existieren kommt !!

+0

Nun, in erster Linie, was macht Ihr IDE (Netbeans, Eclipse IntelliJ) sagen, wenn es "nicht mehr läuft"? Beendet es mit einer Rückkehr 0 wie nichts passiert ist und alles ist gut? – Shiki

+0

Ich arbeite in BlueJ.Es stoppt zu laufen, wenn ich addHotel() an der ersten Scanner.nextLine() aufrufen. Dort soll ich Eingabe geben, aber ich kann nicht am Terminal schreiben.Auch kann ich nicht anrufen jede andere Methode. –

Antwort

1

Die gui funktioniert gut:

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Window extends JFrame implements ActionListener { 

    JButton b1 = new JButton("Load from file"); 
    JButton b2 = new JButton("Save to file"); 
    JButton b3 = new JButton("Add hotel and resrvations"); 
    JButton b4 = new JButton("Search hotel by id"); 
    JButton b5 = new JButton("Search reservation by name"); 

    Main m0 ; 

    public Window(Main main0) { 

     super("Management");//Name 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     b1.addActionListener(this); 
     b2.addActionListener(this); 
     b3.addActionListener(this); 
     b4.addActionListener(this); 
     b5.addActionListener(this); 

     FlowLayout flow = new FlowLayout(); 
     setLayout(flow); 

     add(b1); 
     add(b2); 
     add(b3); 
     add(b4); 
     add(b5); 
     pack(); 

     setVisible(true); 

     m0 = main0; 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 

     Object source = ae.getSource(); 
     if(source == b1) { 
      m0.loadFile(); 
     }else if(source == b2) { 
      m0.saveFile(); 
     }else if(source == b3) { 
      m0.addHotel(); 
     }else if(source == b4) { 
      m0.searchById(); 
     }else if(source == b5) { 
      m0.searchByName(); 
     } 
    } 

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

class Main { 

    public void loadFile() { 
     System.out.println("loadFile pressed"); 
    } 

    public void searchByName() { 
     System.out.println("searchByName pressed"); 
    } 

    public void searchById() { 
     System.out.println("searchById() pressed"); 
    } 

    public void addHotel() { 
     System.out.println("addHotel pressed"); 
    } 

    public void saveFile() { 
     System.out.println("saveFile pressed"); 
    } 
} 

So ist das Problem in Main sein muss, die nicht gebucht wurde. betrachten immer mcve

bearbeiten Die MCVE funktioniert auch gut geschrieben Posting:

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Scanner; 
import javax.swing.JButton; 
import javax.swing.JFrame; 


public class Main{ 

    public void userInput(){ 
     Scanner scan = new Scanner(System.in); 

     System.out.println("Give hotel's name : "); 
     String name = scan.nextLine(); 

     System.out.println(name); 
    } 

    public static void main(String[] args){ //added String[] args 
     Main m0 = new Main(); 
     Window w = new Window(m0); 
    } 
} 

class Window extends JFrame implements ActionListener { 

    JButton b1 = new JButton("Get input"); 
    Main m0 = new Main(); 

    public Window(Main main0) { 
     super("Management"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     b1.addActionListener(this); 

     FlowLayout flow = new FlowLayout(); 
     setLayout(flow); 
     add(b1); 

     pack(); 

     setVisible(true); 

     m0 = main0; 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     Object source = ae.getSource(); 
     if(source == b1) { 
      m0.userInput(); 
     } 
    } 
} 

Die Ausgabe erscheint auf dem Konsole wie erwartet:

Geben Hotels Name:
The Crown Hotel
The Crown Hotel

+0

Wo kann ich einen neuen Code posten (es ist meine erste Buchung) –

+0

Sie haben bereits einen Code eingegeben. Bitte bearbeiten und fügen Sie eine minimale Version von 'Main' – c0der

+0

Just posted it.Ich hoffe, es wird Ihnen helfen und danke für Ihre Zeit! –