2016-05-12 5 views
0

Ich verwende NetBeans 8.0.2. Ich habe mehrere Foren durchsucht, um eine Lösung für meine aktuelle Situation zu finden. Ich kann auf die Methode eines anderen Pakets innerhalb einer Klasse nicht zugreifen. Ich habe das erforderliche Paket importiert und versucht, eine Instanz der Klasse zu erstellen. Zum einem NetBeans eine rote Linie unter dem Code stellt sagen, dassKann keine Werte an Klasse in anderem Paket senden, da Paket nicht existiert

"Package sts2 does not exist. <identifier> expected" 

nächste, wenn ich versuche, das Verfahren für den Zugriff auf das instanceName.methodName Format es keine Liste der verfügbaren Methoden nicht zeigt, es zeigt nur neu. "sts2" ist der Name der Instanz, die ich für die Klasse "Start2" erstellt habe. Die Klasse "Start2" befindet sich in einem Paket, das sich von der Klasse unterscheidet, die die abgerufene Eingabe verwendet. Ich habe die import-Anweisung verwendet, um das erforderliche Paket zu importieren.

Ich habe versucht, NetBeans neu zu starten, meinen Computer neu starten, aber es ist immer noch dasselbe. Grundsätzlich versuche ich, die Werte von Variablen zu sammeln und sie von einer Klasse zur anderen zu übergeben und Berechnungen mit diesen Werten durchzuführen. Diese Klassen sind GUIs, die sich mit Benutzereingaben befassen müssen.

Bitte beachten Sie, ich habe mehrere Beiträge über die Übergabe von Variablen zwischen den Klassen gesehen, aber es ist nicht wirklich im Einklang mit meiner derzeitigen misslichen Lage. Ist es möglich, Cross-Importe durchzuführen, wie Paket A importiert Paket B, um auf seine Methoden zuzugreifen, dann umgekehrt Paket B importiert Paket A, um auf seine Methoden zuzugreifen. Was mache ich hier falsch? Übergebe ich die Werte, wie ich sein sollte?

Weitere Informationen finden Sie im folgenden Code (ignorieren Sie, dass ich keine Standardpaketnamen vom Typ com.name.barewithme verwendet habe). Ich hoffe, mit dieser Aufgabe meine Kenntnisse und Fähigkeiten von JavaSE zu stärken.

Die Start2-Klasse, die die Daten abruft und sendet.

package home; 
import Solution_screens.*; 

public class Start2 extends javax.swing.JFrame { 
    //this is the Start2 class it recieves user input via GUI then sends to PayRoll class in different package ie Solutions_screens) 
    public void calcDisp(){ 
    //this method is called from PayRoll class. it collects and sends the values over 
    String firstname = jTextField1.getText(); 
    String sal1 = jTextField5.getText(); 
    float sal = Integer.parseInt(sal1); 
    PayRoll p = new PayRoll(); //creating instance of the PayROll class so I can send retrieved values over there 
    p.userInput(firstname); //userInput method is defined in PayRoll class 
    } 
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    // this button was dragged in using NB DnD 

    PayRoll payr = new PayRoll(); //another instance of PayRoll to make it visible 
    payr.setVisible(true); 
    } 
} 

Nun ist die Payroll-Klasse

package Solution_screens; 
import home.Start2; 

public class PayRoll extends javax.swing.JFrame { 
    //here I only need the Start2 class and dont have to import all the classes of the package 
    Start2 sts2=new Start2(); //creating an instance of Start2 so I can access the calcDisp() method. It highlights sts2 to green, which should not be. 
    sts2.calcDisp(); // this is where the problem seems to be. NB gives the error that it does not exist 
    // this method is created to collect the values and work with them. 
    public void userInput(String name){ 
    jTextArea1.setText(name); 
    } 
} 

Ich habe die IDE-Code generiert gelassen, wie sie scheinen gut funktioniert werden.

+0

Sie können keine Anweisungen außerhalb einer Klasse platzieren. Ihre Klassendeklaration fehlt vollständig. Fügen Sie die Klasse hinzu und fügen Sie Ihre Initialisierungsanweisungen in einen Initialisiererblock oder in den Konstruktor ein. Sie können die folgenden Informationen überprüfen: https://docs.oracle.com/javase/tutorial/java/TOC.html –

+0

@AndreasFester Vielen Dank, dass Sie darauf hingewiesen haben . Da mein Code sehr lang ist, hatte ich das Gefühl, dass ich nur die relevanten Teile herausbringen sollte, damit mein Problem schnell und genau gelöst werden kann. Natürlich ist eine Klasse in meinem Code deklariert. Ich habe auch keine Kommentare außerhalb der Klassen. Ich werde bearbeiten, was ich gepostet habe, um Missverständnisse zu vermeiden. Auch dein Vorschlag ist eines der Dinge, die ich ausprobiert habe und es hat nicht funktioniert. – user3650467

+0

Sie sollten dann nicht Dinge auslassen, die nicht kompilieren, sondern eine [MVCE] (http://stackoverflow.com/help/mcve) bereitstellen. Der fehlende Teil hier ist C, für vollständig. –

Antwort

1

Der Fehler kommt von der Tatsache, dass Sie calcDisp() außerhalb eines beliebigen Blocks aufrufen.

Es gibt mehrere Möglichkeiten, um Ihren Code Arbeits haben:

  1. einen Konstruktor verwenden (empfohlen).

    package Solution_screens; 
    import home.Start2; 
    
    public class PayRoll extends javax.swing.JFrame { 
        Start2 sts2; 
        public PayRoll() { 
        sts2 = new Start2(); 
        sts2.calcDisp(); 
        } 
        public void userInput(String name){ 
        jTextArea1.setText(name); 
        } 
    } 
    
  2. Mit dem Initialisierungsbaustein

    package Solution_screens; 
    import home.Start2; 
    
    public class PayRoll extends javax.swing.JFrame { 
        Start2 sts2; 
        { 
        sts2 = new Start2(); 
        sts2.calcDisp(); 
        } 
        public void userInput(String name){ 
        jTextArea1.setText(name); 
        } 
    } 
    

Dies sollte Ihr aktuelles Problem beheben. Ich habe mehr Reserve für den Rest des Codes und hoffe, dass das, was Sie weggelassen haben, korrekt ist, denn so wie es ist, werden Sie nie etwas tun.

+0

das könnte funktionieren, aber ich habe meinen Fehler erkannt. Die Sache ist jetzt die Werte von dem Benutzer in Start2 Klasse erhalten nicht in JtextArea der PayRoll-Klasse festgelegt werden. Ich schätze Ihre Vorschläge. – user3650467

0

Ist es möglich, Querimporte zu tun, wie Paket A Importe Paket B auf seine Methoden zugreifen dann in umgekehrter Richtung Paket B Importe Paket A bis Zugang seine Methoden.

Zunächst wird dieser Ansatz nicht vorgeschlagen.Dies kann zu Sicherheitsproblemen führen. (See details)

Zweitens Sie eine Instanz der Klasse PayRoll innerhalb der Start2 Klasse erstellen und eine Instanz von Start2 Klasse innerhalb PayRoll Klasse für beide Seiten erstellen. Das ist ein anderer falscher Ansatz.

Sie müssen _Design Pattern_s (speziell Observer Pattern) sehen, um eine Lösung für Ihre Situation zu finden.

0

Ich schätze die Aufmerksamkeit, die diesem Thema geschenkt wird. Um mit dem anfänglichen Problem zu beginnen, war mein Code außerhalb eines Blocks, so dass ich auf keine der Methoden zugreifen konnte und NetBeans konnte mir keine Vorschläge liefern, da das neue weiterhin angezeigt wurde.

also die Werte senden über das es ist:

Start2 Klasse

package home; 
import Solution_screens.*; 

public class Start2 extends javax.swing.JFrame { 
//this is the Start2 class it recieves user input via GUI then sends to PayRoll class in different package ie Solutions_screens) 
public void calcDisp(){ 
//this method is called from here using button below. it collects and sends the values over 
String firstname = jTextField1.getText(); 
String sal1 = jTextField5.getText(); 
float sal = Integer.parseInt(sal1); 
PayRoll p = new PayRoll(); //creating instance of the PayROll class so I can send retrieved values over there 
p.userInput(firstname, sal); //userInput method is defined in PayRoll class 
p.setVisible(true);//use same instance to show the PayRoll GUI 
} 
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) 
{           
// this button was dragged in using NB DnD 
//no need creating another instance of PayRoll class just call the calcDisp method created above and it sends users retreived data over. 

calcDisp(); 

} 
} 

Nun ist die Payroll-Klasse

package Solution_screens; 
import home.Start2; 

public class PayRoll extends javax.swing.JFrame { 
//here I only need the Start2 class and dont have to import all the classes of the package 


// this method is created to collect the values and work with them. 
public void userInput(String name, String ssal){ 
jTextArea1.setText("Payroll Calculation for: " +name +"\t" "Salary is : "+ssal); 
} 
} 

Es besteht keine Notwendigkeit() in Payroll Klasse zu nennen calcDisp ist Der Button von Start2 beschäftigt sich damit. Ich kann sogar andere Variablen deklarieren und setzen und sie an PayRoll senden. Dort ist das Problem gelöst.

Verwandte Themen