static?

  • bin schwerer anfänger und will mal eine kleine animation programmieren. ich hab hier ein buch vor mir, das mir sagt, wie ich sowas bei einem applet machen müsste. ich hab das gleiche bei einer applikation versucht, nur das geht bei mir einfach nicht. kann mir hier jemand helfen? ich kriege die ganze zeit die meldung: "dreide.java:73: non-static variable ani cannot be referenced from a static context
    ani=new mAnimation();
    ^
    dreide.java:73: non-static variable this cannot be referenced from a static context
    ani=new mAnimation();
    ^
    dreide.java:74: non-static variable ani cannot be referenced from a static context
    ani.start();"

    bei dem code:

    Java-Quellcode

    1. import javax.swing.*;
    2. import java.awt.*;
    3. import java.awt.event.*;
    4. import java.util.*;
    5. public class dreide extends JFrame {
    6. mCanvas spielfeld;
    7. int x=0;
    8. int y=0;
    9. mAnimation ani;
    10. dreide(String title) {
    11. super(title);
    12. getContentPane().setLayout(new FlowLayout());
    13. spielfeld=new mCanvas();
    14. getContentPane().add(spielfeld);
    15. class mWindowAdapter extends WindowAdapter {
    16. public void windowClosing(WindowEvent e) {
    17. System.exit(0);
    18. }
    19. }
    20. addWindowListener(new mWindowAdapter());
    21. }
    22. class mCanvas extends Canvas {
    23. mCanvas() {
    24. setBackground(Color.black);
    25. setForeground(Color.white);
    26. }
    27. public void paint(Graphics g) {
    28. g.translate(150,150);
    29. g.fillOval(x,y,3,3);
    30. }
    31. public Dimension getMinimumSize() {
    32. return new Dimension(300,300);
    33. }
    34. public Dimension getPreferredSize() {
    35. return getMinimumSize();
    36. }
    37. }
    38. class mAnimation extends Thread {
    39. public void run() {
    40. while(isInterrupted()==false) {
    41. x++;
    42. repaint();
    43. try {
    44. sleep(40);
    45. }
    46. catch(InterruptedException e) {
    47. return;
    48. }
    49. }
    50. }
    51. }
    52. public static void main(String[] args) {
    53. dreide fenster=new dreide("test");
    54. fenster.pack();
    55. fenster.setSize(300,300);
    56. fenster.setResizable(false);
    57. fenster.show();
    58. ani=new mAnimation();
    59. ani.start();
    60. }
    61. public void start() {
    62. if(ani==null) {
    63. ani=new mAnimation();
    64. ani.start();
    65. }
    66. }
    67. public void stop() {
    68. if(ani==null) {
    69. ani.interrupt();
    70. ani=null;
    71. }
    72. }
    73. public void destroy() {
    74. if(ani==null) {
    75. ani.interrupt();
    76. ani=null;
    77. }
    78. }
    79. }
    Alles anzeigen


    danke im voraus, dominik.
    Gruss Dominik.

  • public static void main(String[] args) {
    dreide fenster=new dreide("test");
    fenster.pack();
    fenster.setSize(300,300);
    fenster.setResizable(false);
    fenster.show();

    ani=new mAnimation();
    ani.start();
    }


    Auf eine Membervariable greift man mit einem "." zu.


    ...
    fenster.ani = new mApplication();
    ...


    Ausserdem, wieso willst Du in main() "ani" neu Anlegen, zum einen kennt main() die Variable "ani" nicht, zum andern, macht das doch die Methode dreide.start() schon.
    Wenn ich mir eine Bemerkung erlauben darf, Klassennamen beginnen meist mit einem Grussbuchstaben.

    so long
  • Alternative Beschreibung:

    Beim aufruf von "static void main()" durch die virtualle Machine existiert noch kein Objekt der Klasse "dreide", main() ist wie in C nur eine Funktion ohne Objekt. Da Java jedoch keine reinen Funktionen kennt wurde der Umweg über static Methoden gewählt, die ja auch ohne existierendes Objekt aufrufbar sind. Generell musst du in main() immer ein Objekt erzeugen und mit diesem arbeiten.

    ani=new mAnimation();

    schlägt fehl, da eben kein Objekt da ist, das so eine Instanz Variable hat

    ani.start();

    dito

    Die beiden Aufrufe gehören in den Konstruktor der dreide Klasse.

    Ich find's auch nich besonders elegant, aber so isses nun mal.
  • könnt ihr nicht lesen? bei mir steht grünschnabel und das bin ich auch ;) *g*

    naja, meine erkentnis: ich bin wohl noch nicht so weit, als dass ich das verstehen könnte. trotzdem danke für beide antworten :) ich werd vielleicht in einer woche nochmals mit dem problem auftauchen. thx :) dominik.

    ps. kennt vielleicht jemand gute links, die die begriffe "klasse","static","void" usw. für mich verständlich (für dummies, die noch nie was von java gehört haben) erklären?
    Gruss Dominik.
  • Gruenschnabel, heisst ja erstmal nur, das Du hier noch nicht viel gepostet hast.
    Was Du fuer Programmiererfahrung hast, weis man ja dadurch nicht.

    Von welcher Sprache kommst Du denn, welche kannst Du? Oder faengst Du mit Java an?
    In dem Fall wuerde ich Dir ein Buch, wo moeglichst viel fuer den Einstieg drin ist,, empfehlen. Ich hab den Einstieg damals mit "Go to Java2" von Guido Krueger gemacht. Fand das Buch recht gut, hier werden auch Grundsaetzliche Sachen erklaert, wie z.B. Objekt-Orientierung in Java mit Klassen, Methoden, Instanzen, usw...
    Das Gute, das Buch gibt es auch Online zu lesen, goggle mal danach.

    so long.
  • was ich kann: ich hab mal in der schule mit toppascal was gemacht, ist aber auch schon länger her. jetzt habe ich versucht mich mit dem buch "jetzt lerne ich java (m+t)" ein wenig einzuarbeiten, habs durchgelesen, aber nicht wirklich alles verstanden.

    thx, ich werd mal nach dem buch suchen.
    Gruss Dominik.
  • Und gleich noch eine Buchempfehlung:

    Das Buch "Jetzt lerne ich Java" vom Markt & Technik Verlag ist äußerst empfehlenswert für absolute Anfänger!

    Es ist sehr gut zu lesen, gut erklärt und man kommt damit auch ganz schön weit.. will sagen: Wenn du das Buch 2-3 mal durch hast kennst du dich wirklich aus ;)


    Noch ein Tipp anderer Art. Halte dich fern vom Buch "Java 2 für Dummies" das ist nämlich wirklich mies.

    servus
    booster
  • andere frage: wie kann ich eigentlich eine applikation machen, die ich einfach so aufm desktop doppelklicken kann, und die sich dann ausführt, ohne das ich befehle im terminal eingeben muss? ist das auf meinem niveau schon möglich?

    würd gern mal vor ein paar freunden damit rumposen *bg* ;)
    Gruss Dominik.
  • Ganz einfach:

    1.) Xcode/ ProjectBuilder öffnen
    2.) neues Projekt anlegen
    3.) Kompilieren

    fertig!

    Das fertige Programm befindet sich im build Ordner des Projektes. Einfach ein Doppelklick darauf, und Dein erstes 'eigenes' GUI Programm läuft.

    t.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • zum programmieren ist Xcode spitze. SubEthaEdit brauchst du zum programmieren eigentlich nur, wenn du mit mehreren Leuten übers Internet gleichzeitig arbeiten willst. Ansonsten ist es eher umständlich, weil du dann immer wieder zum kompilieren in Xcode rein musst. SubEthaEdit eignet sich auch, wenn du mal was kleines machst (n einfaches c-tool oder so), wo Xcode vielleicht mit Kanonen auf Spatzen geschossen scheint...

    Max
  • XCode ist zwar sehr mächtig, nach meinem Geschack zum Programmieren aber nicht wirklich geeignet !
    Wer 48 Stunden pro Tag damit verbringt, ist wahrscheinlich eins damit und sieht das anders ... wer gelegentlich programmiert, stellt fest, dass es alles andere als intuitiv , langsam ist und wenig Hilfe beim Programmieren anbietet.
    Eine IDE mit ordentlicher Codevervollständigung, eingebauter Doku und vielen Hilfreichen Werkzeugen ist nach meinem Geschmack zum Programmieren besser geeignet. (Java Lernen muss man leider aber trotztdem selbst.)
    Ich selbst verwende JBuilder, Eclipse funktioniert ähnlich. Das wichtige ist, sich vorher mit den wichtigsten Funktionen vertraut zu machen.
    Dann kann man schnell in seinem Quelltext herumfliegen, genauso wie es die Programmschritte im Kopf tun. So etwas geht in XCode bei weitem nicht.
    Beide genannten Editoren sind kostenlos.

    Um eine anklickbares Programm zu erzeugen bietet Apple drei Methoden in Java141Development an :

    mit ProjectBuilder (XCode)
    mit JarBundler (heisst jetzt glaube ich anders)
    an der Kommandozeile (bzw. Texteditor)

    Bei der letzten Variante, versteht man nebenher wie Programme in OS X aufgebaut sind. Hat auch was für sich.
  • Xcode für Java...

    ... ist wirklich kein gutes Gespann. Das heißt wenn es sich um reine Java Anwendungen (z.B. GUI Anwendungen mit Swing) handelt.

    Dafür dürfte Xcode in der derzeitigen Form nicht wirklich gedacht worden sein. Die "pure Java" Fähigkeit is meiner Vermutung nach einfach ein Nebenprodukt der Tatsache dass du auch für Cocoa Java als Programmiersprache verwenden kannst (anstatt Objective-C das wohl fast alle dafür verwenden).

    Praktisch jede reine Java IDE ist (für Java) bequemer zu benutzen, und davon gibt es einige die sehr gut sind auch gratis. Ich selbst benutze Eclipse (eclipse.org), andere schwören auf JBuilder (borland.com ?? falls nicht hilft dir Google weiter)...
    Von Sun gibt es auch noch NetBeans usw.


    Ein interessanter Ansatz zum Erlernen Objektorientierter Programmierung ist BlueJ (bluej.org) Auch wenn ich damit nicht wirklich warm werden konnte, sieh es dir mal genau an. Damit kannst du dir grafisch anschauen und auch ausprobieren wie verschiedene Objekte und ihre Methoden zusammenarbeiten um ein Programm zu bilden. (Eventuell war ich schon ein wenig "zu weit" beim Java Lernen, um noch von dem Programm profitieren zu können, als ich erstmals darauf gestoßen bin)


    viel Spass weiterhin
    servus
    booster
  • Nachtrag zum Doppelklicken auf dem Schreibtisch

    Ich habe drei Varianten genannt. Die Einfachste habe ich aber vergessen nämlich das JAR-Archiv mit Manifest.

    Wenn im JAR-Archiv eine Manifest-Datei enthalten ist, aus der die
    Startklasse hervorgeht, sollte man die JAR-Datei einfach Doppelklicken können und so das Programm starten können. In dem Fall ist das Programm-Symbol meiner Kenntnis nach fix (JAVA-Symbol).