Zugriff auf args[0] in "Test1View" unter Netbeans - Java Desktop Application

leftitbe

Grünschnabel
Hallo liebe Javagemeinde,

Ein einfaches Problem bereitet mir grosse Schwierigkeiten!
Ich erstelle unter Netbeans 6.1 Beta ein Projekt "Java Desktop Application" und nenne es "Test1". Netbeans erzeugt mir drei Dateien Test1App.java, Test1View.java und Test1AboutBox.java.
In Test1App wird auch, wie in der Java-Main-Methode gewohnt, die Argumente args[] bei Neustart übergeben.

Wie kann ich jetzt in Test1View.java z.B. auf args[0] zugreifen? Mit einer static-Variable konnte ich dies schon bewerkstelligen (ist ja wohl nicht ganz Sinn der Sache). Wie erreiche ich das aber z.B. über eine public-Variable?

Vielen Dank für eure Ratschläge im voraus...

Gruss
leftitbe
 

zerix

Hausmeister
Moderator
Hallo,

wenn man es über eine public-Variable machen würde, wäre es fast das gleiche wie mit einer static-Variable.
Eine Möglichkeit wäre, dass du einen dementsprechenden Konstruktor hast und da die args übergibst. Oder du könntest es mit Setter-Methoden machen. Kommt halt ganz drauf an wie dein Programm aufgebaut ist.

MFG

Sascha
 

leftitbe

Grünschnabel
Hallo Sascha,

vielen Dank für deine Antwort.

Leider funktioniert es mit einer public Variable nicht so, wie ich mir das vorstelle:
.
.
public String Pfadname;
public static void main(String[] args) {
Pfadname=args[0];
launch(Test1App.class, args);
}

Netbeans bringt mir dann die Fehlermeldung: "non-static variable <Pfadname> cannot be referenced from a static context".

Bei der Setter-Methode, soweit ich informiert bin, handelt es sich um eine Zugriffsmethode, die eine Eigenschaft eines Objekts ändert. Das will ich ja auch nicht. Ich will ja nur, dass ich in einer zweiten Klasse nämlich Test1View zugriff auf args[0] habe.

Gruss
leftitbe
 

zerix

Hausmeister
Moderator
Du solltest dir mal die Java-Grundlagen aneignen.

Mach es einfach mit nem Übergabeparameter beim Konstruktor oder einer Methode. Das mit dem Konstruktor hab ich allerdings oben schon erwähnt.

MFG

Sascha
 

leftitbe

Grünschnabel
Lieber Sascha,

die Java-Grundlagen sind mir bekannt!

Wenn du in Netbeans dieses von mir beschriebene Beispiel mal durchgespielt hättest, dann würde dir meine Problematik sofort ersichtlich. Wenn ich versuche in der Startup-Routine den Parameter args[0] zu übergeben, bringt er mir die Fehlermeldung, dass er args[0] nicht kennt. Wenn ich eine public Variable in der Main-Routine nehme um args[0]abzuspeichern, verlangt er eine static-Variable.

Ich weiss, dass meine Tomate auf den Augen bestimmt etwas verdeckt, was ich im Moment noch nicht sehen kann. Deswegen wollte ich es ins Forum stellen, in der Hoffnung, dass jemand diese Problematik schon einmal gelöst hat.

Ich bin immer noch voller Hoffnung....

Gruss
leftitbe
 

Matze

Weltenwanderer
Wenn du in Netbeans dieses ...
Genau deshalb musste ich meine ersten Programme in einem Testeditor schreiben. Das liegt nicht an Netbeans.

Sascha hat eigentlich schon alles gesagt:
Java:
public static String Pfadname; //<-- eine Möglichkeit
public static void main(String[] args) {
    Pfadname=args[0];
    launch(Test1App.class, args); //<-- wenn dus nur übergibst, warum speicherst dus oben in einer Variable?
}
 

zerix

Hausmeister
Moderator
Lieber leftitbe,
dein Problem ist mir sehr wohl ersichtlich, da brauche ich das nicht erst durch zu spielen.

Wie ich auch sagte, ist das mit der public-Variable keine gute Möglichkeit. Es wäre aber möglich.
Code:
public class Test{

   public String arg0;

   public static void main(String[] args){
      Test test = new Test();
      test.arg0 = args[0];
   }

}

Deshalb der Spruch von mir mit den Grundlagen. Das sind nämlich Grundlagen. :)
Das ist aber keine gute Lösung.

Eine weitere Möglichkeit wäre halt über eine Setter-Methode
Code:
public class Test{

   public String arg0;

   public static void main(String[] args){
      Test test = new Test();
      Test2 test2 = new Test2();
      test2.setPfad(args[0]);
   }

}

Code:
public class Test2{

   private String pfad;

   public void setPfad(String pfad){
      this.pfad=pfad;
   }
}


Oder halt noch so
Code:
public class Test{

   public String arg0;

   public static void main(String[] args){
      Test test = new Test();
      Test2 test2 = new Test2();
      test2.tuWas(args[0]);
   }

}

Code:
public class Test2{

   
   public void tuWas(String pfad){
      System.out.println(pfad);
   }
}

Die letzten beiden Beispiele sind allerdings auch Grundlagen. Deshalb hab ich dir geraten dir die Grundlagen erstmal richtig anzueignen.
Das war nicht böse gemeint, sondern nur ein guter Rat.


MFG

Sascha
 

leftitbe

Grünschnabel
Hallo,

vielen Dank nochmal für eure Unterstützung.

Im netbeans-Forum habe ich von Michael folgenden Hinweis erhalten. Der Code in Test1App muss lauten:

Code:
  public String arg0=new String(); 

  @Override 
  protected void initialize( String[ ] args ) { 
    super.initialize( args ); 
    this.arg0 = args[ 0 ]; 
  }


in Test1View greift man dann z.B. im Konstruktor auf die Public-Variable folgendermassen zu:
Code:
. 
. 
VPfadname=test1.Test1App.getApplication().arg0; 
.

wobei die Variable VPfadname in Test1View entsprechend deklariert ist.

Gruss
leftitbe
 

zerix

Hausmeister
Moderator
Naja, ich sagte ja, dass die Lösung mit der public-Variable nicht sehr elegant ist.

Deshalb hab ich dir drei Varianten gezeigt, wie es schöner ist.
Da ich deine Klassen ja nicht kenne, konnte ich nur sehr allgemein-gehaltene Beispiele bringen.


MFG

Sascha
 

Neue Beiträge