Schiff

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tach auch.

    Wir sind dabei ein Schiff über mehrere Bildschirme "fahren" zu lassen
    und zwar mit Hilfe einer Textdatei. Nicht mit irgendwelchen Netzwerkbefehlen
    sondern ganz primitiv.

    Also ein Schiff, das von links nach rechts fährt hab ich mittlerweile.
    Mein Problem is nur, dass sobald die Spitze des Schiffes den rechten
    Bildschirmrand berührt, ich eigentlich einen Satz wie "Com01 fertig."
    in die Textdatei ausgeben möchte (damit das nächste Schiff auf einem
    benachbarten Bildschirm beginnt zu fahren. -> die Textdatei ist für
    alle zugänglich), was jedoch nicht funktioniert. Hab versucht den Befehl
    mit in den Timer einzubauen. Geht aber nicht!

    Wäre für einen Tip dankbar!

    Klasse:

    Quellcode

    1. import java.io.*;
    2. import java.awt.*;
    3. import java.applet.*;
    4. public class Textdatei_bearbeiten
    5. {
    6. Image bild;
    7. public void FileWriter(String x)
    8. {
    9. Writer fw = null;
    10. try
    11. {
    12. fw = new FileWriter( "//Cd-server/Tauschplatz/fileWriter.txt" );
    13. fw.write( "" + x);
    14. fw.append( '\n' );
    15. }
    16. catch ( IOException e )
    17. {
    18. System.err.println( "Konnte Datei nicht erstellen" );
    19. }
    20. finally
    21. {
    22. if ( fw != null )
    23. try
    24. {
    25. fw.close();
    26. }
    27. catch ( IOException e )
    28. {
    29. }
    30. }
    31. FileReader();
    32. }
    33. public void FileReader()
    34. {
    35. Reader f = null;
    36. try
    37. {
    38. f = new FileReader( "//Cd-server/Tauschplatz/fileWriter.txt" );
    39. for ( int c; ( c = f.read() ) != -1; )
    40. System.out.print( (char) c );
    41. }
    42. catch ( IOException e )
    43. {
    44. System.err.println( "Error reading file!" );
    45. }
    46. finally
    47. {
    48. try
    49. {
    50. f.close();
    51. }
    52. catch ( Exception e )
    53. {
    54. }
    55. }
    56. }
    57. public void show(Hallo app, Graphics g, int i)
    58. {
    59. bild = app.getImage(app.getCodeBase(), "Segelschiff.jpg");
    60. g.drawImage(bild, -1690 + i, 300, 3000, 450, app);
    61. }
    62. }
    Alles anzeigen



    Applet:

    Quellcode

    1. import java.awt.*;
    2. import javax.swing.*;
    3. import java.awt.event.*;
    4. public class Hallo extends JApplet implements Runnable
    5. {
    6. private Image dbImage;
    7. private Graphics dbg;
    8. Textdatei_bearbeiten a;
    9. Thread timer;
    10. int milliseconds, seconds, i;
    11. boolean ende;
    12. public void init()
    13. {
    14. a = new Textdatei_bearbeiten();
    15. i = 0;
    16. }
    17. public void start()
    18. {
    19. if(timer == null)
    20. {
    21. timer = new Thread(this);
    22. timer.start();
    23. milliseconds = 0;
    24. seconds = 0;
    25. ende = false;
    26. }
    27. }
    28. public void stop()
    29. {
    30. if(timer != null)
    31. {
    32. timer.stop();
    33. timer = null;
    34. }
    35. }
    36. public void run()
    37. {
    38. while(true)
    39. {
    40. repaint();
    41. if(ende)
    42. {
    43. stop();
    44. }
    45. try
    46. {
    47. Thread.sleep(200);
    48. milliseconds += 200;
    49. seconds = (int) milliseconds / 1000;
    50. if (seconds <= 47)
    51. i += 7;
    52. else if (seconds > 32)
    53. ende = true;
    54. }
    55. catch(InterruptedException e)
    56. { }
    57. }
    58. }
    59. public void update (Graphics g)
    60. {
    61. // Initialisierung des DoubleBuffers
    62. if (dbImage == null)
    63. {
    64. dbImage = createImage (this.getSize().width, this.getSize().height);
    65. dbg = dbImage.getGraphics ();
    66. }
    67. // Bildschirm im Hintergrund löschen
    68. dbg.setColor (getBackground ());
    69. dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
    70. // Auf gelöschten Hintergrund Vordergrund zeichnen
    71. dbg.setColor (getForeground());
    72. paint (dbg);
    73. // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
    74. g.drawImage (dbImage, 0, 0, this);
    75. }
    76. public void paint(Graphics g)
    77. {
    78. g.setColor(Color.WHITE);
    79. g.fillRect(getWidth() - 100, 0, 100, 40);
    80. g.setColor(Color.RED);
    81. g.drawString("s: " + seconds, getWidth() - 50, 15);
    82. a.show(this, g, i);
    83. }
    84. }
    Alles anzeigen
    Even Homer nods! But if you really want to f*ck up you'll need a computer!
  • Was funktioniert denn nicht? Steht nichts in der Datei? Kommt eine Exception?

    Generell würde ich dir Socket und ServerSocket empfehlen. Das gehört zwar zur Netzwerkkomminikation ist aber primitiv und weit einfacher als das, was du machen willst (wie händelst du eigentlich die Zugriffsrechte auf die Datei bei zig Lese- und einem Schreibvorgang.). Sobald du weist was eine IP und ein Port ist, bist du bei den Sockets richtig.
  • wie händelst du eigentlich die Zugriffsrechte auf die Datei bei zig Lese- und einem Schreibvorgang.
    Ja das ist ja mein Hauptproblem gewesen...
    Sobald du weist was eine IP und ein Port ist, bist du bei den Sockets richtig.
    Was das ist, ist mir schon klar.
    Na egal, wir versuchen uns zur Zeit an den Sockets.
    Even Homer nods! But if you really want to f*ck up you'll need a computer!