2012-04-15 5 views
1

Ich versuche, eine andere Klasse aufzurufen, die im selben Verzeichnis ist und kompiliert wird. Ich bekomme immer das Fehlersymbol nicht gefunden, wenn ich die andere Klasse anrufe. Kann mir bitte jemand meinen Code anschauen und schauen was ich falsch mache.Wie rufe ich eine andere Klasse aus einer Klasse in Java

Dies ist der Code:

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

public class NameGameFrame extends JFrame 
{ 
    public static String name; 
    static JTextField textfield = new JTextField(20); 
    static JTextArea textarea = new JTextArea(30,30); 

    public static void main(String[] args) 
    { 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setTitle("Name Game"); 
     frame.setLocation(500,400); 
     frame.setSize(800,800); 

     JPanel panel = new JPanel(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 

     JLabel label = new JLabel("Enter the Name or Partial Name to search:"); 
     c.gridx = 0; 
     c.gridy = 0; 
     c.insets = new Insets(2,2,2,2); 

     panel.add(label,c); 

     c.gridx = 0; 
     c.gridy = 1; 
     panel.add(textarea,c); 

     JButton button = new JButton("Search"); 
     c.gridx = 1; 
     c.gridy = 1; 
     panel.add(button,c); 

     c.gridx = 1; 
     c.gridy = 0; 
     panel.add(textfield,c); 

     frame.getContentPane().add(panel, BorderLayout.NORTH); 
     frame.pack(); 
     frame.setVisible(true); 

     button.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       name = textfield.getText(); 
       java.io.File file = new java.io.File("namesdata.txt"); 
       try 
       { 
        Scanner input = new Scanner(file); 
        num = input.nextLine(); 
        while (input.hasNext()) 
        { 
         NameRecord(name); 
        } 
       } 
       catch(FileNotFoundException e) 
       { 
        System.err.format("File does not exist\n"); 
       } 
       textarea.setText(fields[0]); 
      } 
     }); 

    } 
} 

NameRecord ist der Name der anderen Klasse, die ich nennen werde. Muss ich auch etwas in den Header der zweiten Dateiklasse schreiben, die ich anrufe?

+0

Hallo ein Objekt dieser Klasse zu machen! Könnten Sie das nächste Mal Ihre Bewerbung vereinfachen, bevor Sie sie veröffentlichen? Ich denke, Sie können das sehr sichere Problem auf Anwendung zeigen, die 15 Linien hat, also müssen andere Programmierer nicht suchen, wo die problematische Linie ist. Danke – kajacx

+0

Nun, da Sie Ihren Quellcode gelöscht haben, ist dies keine wirkliche Frage. – EJP

Antwort

1

Sie benötigen einen Verweis auf eine Instanz von NameRecord in der Klasse, die ihre Methoden aufrufen will. Ich sehe keinen. Habe ich es vermisst? Wenn nicht, füge eins hinzu.

Ich glaube nicht, dieses Recht Java ist:

while (input.hasNext()) 
{ 
    NameRecord(name); 
} 

Sie müssen new rufen einen Konstruktor aufzurufen, wie ich Martijn sehen hat darauf hingewiesen.

+0

Welche Syntax wird benötigt, um auf eine Instanz von NameRecord zu verweisen? –

+0

Martijn hat es Ihnen gegeben: NameRecord nr = new NameRecord (name); Dies ist Java 101. – duffymo

+0

Technisch gesehen könnte der zitierte Code legal sein, wenn er in einer Klasse enthalten wäre, die eine 'NameRecord (String s)' Methode deklariert, oder wenn eine solche statische Methode in einer anderen Klasse deklariert und mit statischem Import importiert wurde . Obwohl es möglich wäre, wäre es nicht nett, da es die Java-Namenskonventionen verletzen würde. – Alderath

3

Sie können keine Klasse aufrufen. Sie können Methoden und Konstruktoren aufrufen.

Ihre Aussage NameRecord(name); ist Unsinn. Ich glaube, Sie wollen den Konstruktor aufzurufen:

NameRecord record = new NameRecord(name); 
+0

Das möchte ich machen. Aber ich bin nicht sicher, wie man es macht, indem ich Namen dem Konstruktor der anderen Klassendatei übergebe –

+0

Genau wie ich schrieb. Sie benötigen einen Konstruktor 'NameRecord (String name)'. –

0

Anstelle dieser

while (input.hasNext()) 
       { 
        NameRecord(name); 
       } 

Sie

 while (input.hasNext()) 
       { 
        NameRecord record = new NameRecord(name); 
       } 
Verwandte Themen