Zum Inhalt springen

Devilmarkus

Mitglieder
  • Gesamte Inhalte

    158
  • Benutzer seit

  • Letzter Besuch

Beiträge von Devilmarkus

  1. Hier ist das vorläufige Fenster des Paint-Programmes:

    paint3.png

    Komischerweise kommt es manchmal noch zu Fehlfarben...

    Wenn mir hier jemand helfen mag, bitte melden.

    Ich muss 3 Modi unterstützen:

    0 - 16 aus 27 Farben

    1 - 4 aus 27 Farben

    2 - 2 aus 27 Farben

    Irgendwie funktioniert meine Farbberechnung leider noch nicht so, wie ich das möchte.

    Mode 0 funktioniert allerdings ganz gut schon.

  2. Ahso, die 27 Farben sind also fest.

    Soll das ferstige Bild mit oder ohne Dithering farbreduziert werden? Bisher machst Du es ja ohne.

    Es gibt diverse Algorithmen, um eine Farbpalette zu bilden. Für diesen Spezialfall mit einet Palette von 16 Farben aus 27 festen Farben, müsste man aber vermutlich bei vielen Verfahren Anpassungen vornehmen.

    Das "Gesamte" ist leider viel zu komplex, um es zu erklären.

    Dazu müsste man sich mit dem gateArray des CPC auskennen, über PEEKS und POKES für den CPC bescheid wissen und noch sehr viel mehr.

    Eins aber:

    Das, was auf dem Display erscheint, ist kein "Bild", wie man es kennt, also kein Bitmap. Es besteht aus tausenden von Bildschirmpixeln (160x200 um es genau zu nehmen)

    Ich muss also sehr mühevoll ein Bild in seine Pixel zerlegen und dann auch noch an die richtigen Adressen POKEn (Der CPC baut sein Bild leider nicht von oben nach unten oder umgekehrt auf, sondern baut immer jede 8te Zeile auf)

    Deshalb auch viel umständlicher Code für einen DAU wie mich (Ich habe mir JAVA ohne Handbuch oder Kurs beigebracht. Einfach 'Learning by doing')

    Das Resultat ist allerdings genial geworden.

    Hier mal ein Video, wie ich ein komplettes Bild in nur wenigen Minuten erstelle, auf DSK (Diskimage) speichere und es wieder in den (emulierten) Computer lade: (Am Ende kann man auch den "scheibchenweisen" Aufbau des CPC Bildes sehen)

    Demonstrations-Video

  3. Hier übrigens meine Routine dazu:

       public void convert(boolean detect){
    
           if (loadImg == null)
    
               return;
    
          int width = loadImg.getWidth();
    
          int height = loadImg.getHeight();
    
          if (width > 640)
    
              width = 640;
    
          if (height > 400)
    
              height = 400;
    
          int xstep = 0, ystep = 2;
    
          if (mode == 1)
    
              xstep = 2;
    
          if (mode == 2)
    
              xstep = 1;
    
          if (mode == 0)
    
              xstep = 4;
    
          palcount = new int[27];
    
           for (int x = 0; x < width; x+=xstep)
    
              for (int y = 0; y < height; y+=ystep)
    
              {
    
                  Color test = new Color(loadImg.getRGB(x, y));
    
                  sourceRed = test.getRed();
    
                  sourceBlue = test.getBlue();
    
                  sourceGreen = test.getGreen();
    
                  int dark = 85;
    
                  int medium = 170;
    
                  if (sourceRed < dark)
    
                      CPCRed = 0;
    
                  else
    
                  if (sourceRed >= dark && sourceRed <=medium)
    
                      CPCRed = 0x60;
    
                  else
    
                      CPCRed = 0xff;
    
                  if (sourceGreen < dark)
    
                      CPCGreen = 0;
    
                  else
    
                  if (sourceGreen >= dark && sourceGreen <=medium)
    
                      CPCGreen = 0x60;
    
                  else
    
                      CPCGreen = 0xff;
    
                  if (sourceBlue < dark)
    
                      CPCBlue = 0;
    
                  else
    
                  if (sourceBlue >= dark && sourceBlue <=medium)
    
                      CPCBlue = 0x60;
    
                  else
    
                      CPCBlue = 0xff;
    
                  int cols = 2;
    
                  if (mode == 1)
    
                      cols = 4;
    
                  if (mode == 0)
    
                      cols = 16;
    
                  if (detect)
    
                      cols=27;
    
                  pen = 0;
    
                  if (detect)
    
                      pen=27;
    
                  if (detect)
    
                  for (int p = 0; p < cols; p++){
    
                      if (getCol(p).getBlue() == CPCBlue &&
    
                          getCol(p).getRed() == CPCRed &&
    
                          getCol(p).getGreen() == CPCGreen){
    
                          palcount[p]++;
    
                          pen = p;
    
                          break;
    
                      }
    
                  }else
    
                  for (int p = 0; p < cols; p++){
    
                      if (CPC.setCol(p).getBlue() == CPCBlue &&
    
                          CPC.setCol(p).getRed() == CPCRed &&
    
                          CPC.setCol(p).getGreen() == CPCGreen){
    
                          palcount[p]++;
    
                          pen = p;
    
                          break;
    
                      }
    
                  }
    
                      int cpcX = x;
    
                      int cpcY = y/2;
    
                      if (mode == 0)
    
                          cpcX/=4;
    
                      if (mode == 1)
    
                          cpcX/=2;
    
                      if (!detect)
    
                      CPC.PLOT(cpcX, cpcY, pen, mode);
    
    
              }
    
    
          if (detect){
    
          int count = 0;
    
          int[] check = new int[27];
    
          outcount = new int[27];
    
          for (int p = 0; p < 27; p++)
    
              check[p] = palcount[p];
    
    
          java.util.Arrays.sort(check);
    
          int [] recheck = new int[27];
    
    
          for (int p = 0; p < 27; p++)
    
              recheck[p] = check[26-p];
    
          check = recheck;
    
          for (int p = 0; p < 27; p++){
    
              for (int q = 0; q < 27; q++){
    
                  if (palcount[q] == check[p]){
    
                      outcount[count] = q;
    
                      count++;
    
                  }
    
                  if (count==17)
    
                      break;
    
              }
    
          }
    
    
          System.out.print("FOR T=0 TO 15:READ A:INK T,A:NEXT:DATA ");
    
          for (int pf = 0; pf < 16; pf++){
    
              //*b7d4, b7e5 = CPC 6128
    
              CPC.POKE(0xb7d4+1+pf, GAInks[outcount[pf]]);
    
              CPC.POKE(0xb7e5+1+pf, GAInks[outcount[pf]]);
    
              System.out.print(outcount[pf]);
    
              if (pf<15)
    
                  System.out.print(",");
    
          }
    
          System.out.println();
    
          }
    
       }
    
    

    Das void Convert(...) wird 2x aufgerufen:

    - Zuerst wird die beste Palette berechnet

    - Wenn dieses erfolgt ist, wird das Bild nochmal neu berechnet und auf die erstellte Palette optimiert.

  4. Danke sehr,habe es dann auch endlich hinbekommen, indem ich 2 Arrays verwende.

    Schliesslich muss ja auch die Sortierung von hoch nach niedrig erfolgen.

    (sort liefert es ja genau umgekehrt)

    Dieses ist das Ergebnis:

    Ich kann nun Bilder im JPG, PNG, BMP oder GIF Format auf das Schneider CPC System umwandeln.

    Dabei wir das Bild geladen, es wird in 27 feste Farbwerte neu berechnet, und aus diesen 27 Farbwerten werden dann die 16 am häufigsten verwendeten Farben für eine Palette genommen und dann wird das Bild direkt in den CPC-Bildschirmspeicher gepoked:

    image_import.gif

  5. Hallo,

    ich habe folgendes Problem:

    In einer Routine verwende ich ein Array aus 27 einzelnen Zahlen.

    int[] palcount = new int[27];

    Dieses Array wird nun in jedem Index unterschiedlich "gefüllt".

                  for (int p = 0; p < cols; p++){
    
                      if (getCol(p).getBlue() == CPCBlue &&
    
                          getCol(p).getRed() == CPCRed &&
    
                          getCol(p).getGreen() == CPCGreen){
    
                          palcount[p]++;
    
                          pen = p;
    
                          break;
    
                      }
    
                  }
    Dieses funktioniert auch wunderbar soweit. Die Frage ist nun: Wie kann ich aus diesem Array ein Zweites Array [16] aufbauen, welches die 16 höchsten Werte aus dem ersten Array enthält? Höchster Wert ist noch unbekannt. Diesen zu ermitteln, habe ich auch noch herausbekommen:
                  int highest = 0;
    
                  for (int p = 0; p < 27; p++){
    
                      if (palcount[p] > highest)
    
                          highest = palcount[p];
    
                  }

    Wäre wirklich super, wenn mir da jemand weiterhelfen könnte.

  6. So nach einem längeren Test habe ich nun herausgefunden:

    Bis zum Java 1.6 Update 13 funktioniert es noch.

    Ab Java 1.6 Update 14 flimmert es nur noch.

    (Gut, dass Sun ältere Versionen parat hat)

    Das Display zeigt ein Bild an und aktualisiert bei ca. 50fps.

    Über das Bild werden Icons / bzw andere Grafiken/Text gezeichnet.

    (Im Idealfall 50fps, ältere PCs zeigen nur weniger an)

    Hier Auszüge aus dem Sourcecode:

    
      public Display() {
    
          int[] pixelsc = new int[16 * 16];
    
          imagec = Toolkit.getDefaultToolkit().createImage(
    
                  new MemoryImageSource(16, 16, pixelsc, 0, 16));
    
          blankCursor =
    
                  Toolkit.getDefaultToolkit().createCustomCursor
    
                  (imagec, new Point(16, 16), "invisibleCursor");
    
          gunCursor =
    
                  Toolkit.getDefaultToolkit().createCustomCursor
    
                  (lightGun, new Point(16, 16), "gunCursor");
    
          setCursor(blankCursor);
    
          enableEvents(AWTEvent.FOCUS_EVENT_MASK);
    
          setFocusTraversalKeysEnabled(true);
    
          setRequestFocusEnabled(true);
    
          setDoubleBuffered(true);
    
      }
    
    ................
    
    
      public void updateImage(boolean wait) {
    
        painted = false;
    
        if (imageRect.width != 0 && imageRect.height != 0 && isShowing()) {
    
          raster.setDataElements(0,0,imageWidth,imageHeight,pixels);
    
          repaint(0,imageRect.x,imageRect.y,imageRect.width,imageRect.height);
    
          if (wait)
    
            waitPainted();
    
        }
    
      }
    
    .................
    
      protected void paintImage(Graphics g) {
    
          if (showfps >=1)
    
              doTouchFPS();
    
          if (showfps <=-1 && debug){
    
              showfps++;
    
              doTouchFPS();
    
          }
    
          if (Switches.bilinear && !lowperformance){
    
          Graphics2D g2 = (Graphics2D)g;
    
    
           g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    
                   RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    
           g = g2;
    
           }
    
          if (sourceRect != null){
    
              g.drawImage(image,imageRect.x,imageRect.y,imageRect.x + imageRect.width,
    
                      imageRect.y + imageRect.height,sourceRect.x,sourceRect.y,
    
                      sourceRect.x + sourceRect.width,sourceRect.y + sourceRect.height,null);
    
          }
    
          else if (sameSize){
    
              g.drawImage(image,imageRect.x,imageRect.y,null);
    
          }
    
          else
    
              g.drawImage(image,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null);
    
          }
    
          else{
    
              if (skin == 1)
    
                  g.drawImage(YMmode,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null);
    
              else {
    
                  g.drawImage(YMmode2,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null);
    
              }
    
                  if (!lowperformance)
    
                      paintBalls(g);
    
          }
    
    ................
    
    [Weitere Routinen, wo noch mehr gezeichnet wird]
    
    }
    
    
      public void doTouchFPS() {
    
          long time = System.currentTimeMillis();
    
          mNextFPS++;
    
          if (time-mLastFPSTime >= 1000) {
    
              mCurrFPS = mNextFPS;
    
              mNextFPS = 0;
    
              mLastFPSTime = time;
    
          }
    
      }
    
    
      @Override
    
      public void paintComponent(Graphics g) {
    
        if (image != null){
    
            paintImage(g);
    
        }
    
        painted = true;
    
      }
    
    

    So in etwa....

    (Wer den kompletten Code sehen möchte, bitte melden)

    Wie gesagt: ab 1.6 Update 14 flimmert es nur noch.

  7. Hallo zusammen,

    nach dem aktuellen JAVA-Update funktioniert bei mir die Methode

    this.setDoubleBuffered(true);

    nicht mehr.

    Ist das ein BUG in der aktuellen Version oder geht das irgendwie zu beheben?

    Denn es nervt extrem, wenn die Ausgabe am flimmern ist, und man einzelne Sachen garnicht mehr sieht.

    (Den Source nun hier reinkopieren hat, denk ich, wenig Sinn, es ist ein Display, welches ein Image "painted" (g.drawImage...) und über dieses Image andere Sachen pinseln soll, welche neuerdings nur noch flimmern / fast garnicht mehr zu sehen sind)

    Bis vor Kurzem hat es noch wunderbar funktioniert.

    Seit dem letzten Update wie gesagt nicht mehr.

    Wer kann mir hier weiterhelfen?

    MfG

    Markus

  8. Eine Frage hätte ich aber dennoch hierzu:

    Und zwar möchten wir das Applet auf der grössten, Englischsprachigen Community einsetzen.

    Es wird dort in einem Forum per BBCode eingesetzt.

    Das problem ist allerdings, dass man damit nur Dateien (Disk images, usw) vom "selbigen" Server lesen kann.

    Eine Fremdverlinkung scheint nicht möglich zu sein:

    [cpc=http://cpc-live.com/taf.zip,-taf,1]CPC6128[/cpc]
    Würde zwar auf meinem Server funktionieren, nicht aber auf cpcwiki.com.
    File: http://cpc-live.com/taf.zip
    
    java.security.AccessControlException: access denied (java.io.FilePermission http:\cpc-live.com\taf.zip read)	
    
            at java.security.AccessControlContext.checkPermission(Unknown Source)
    
    	at java.security.AccessController.checkPermission(Unknown Source)
    
    	at java.lang.SecurityManager.checkPermission(Unknown Source)
    
    	at java.lang.SecurityManager.checkRead(Unknown Source)
    
    	at java.io.FileInputStream.<init>(Unknown Source)
    
    	at java.io.FileInputStream.<init>(Unknown Source)
    
    	at JCPC.core.device.Computer.openFile(Computer.java:127)
    
    	at JCPC.core.device.Computer.getFile(Computer.java:193)
    
    	at JCPC.core.device.Computer.getFile(Computer.java:180)
    
    	at JCPC.system.cpc.CPC.loadFile(CPC.java:341)
    
    	at jemu.ui.JEMU.loadFile(JEMU.java:492)
    
    	at jemu.ui.JEMU.start(JEMU.java:217)
    
    	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    
    	at java.lang.Thread.run(Unknown Source)
    
    java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    
    	at java.lang.String.checkBounds(Unknown Source)
    
    	at java.lang.String.<init>(Unknown Source)
    
    	at JCPC.system.cpc.CPC.loadFile(CPC.java:342)
    
    	at jemu.ui.JEMU.loadFile(JEMU.java:492)
    
    	at jemu.ui.JEMU.start(JEMU.java:217)
    
    	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    
    	at java.lang.Thread.run(Unknown Source)
    
    
    

    Kann man hier eventuell (Ohne Signierung) so etwas dennoch zulassen?

  9. Hallo zusammen,

    Ich wollte mich nur nochmal bei allen Usern bedanken, die mir geholfen haben.

    Mittlerweile bin ich nun dabei, für die grösste Englischsprachige CPC-Webseite einen BBCode zu basteln, um meinen Emulator "WebCPC" direkt in Foren-Threads zu bauen.

    Hier mal ein Beispiel:

    Demo Iz Art

    (Dies ist noch ein Testforum, welches nur dazu dient, das Applet zu testen, allerdings werden wir demnächst dieses Feature in das eigentliche Forum einbauen.)

    Das Demo sollte selbstständig im Emulator starten. Es ist eins der technisch kompliziertesten Demos auf dem CPC überhaupt, und benötigt dementsprechend auch eine saubere Emulation.

    Dank dieses Forums hier konnte ich in einigen Bereichen den Emulator noch verbessern.

    MfG

    Markus

  10. Hierbei geht es nicht um eine Vollbildlösung.

    Ich möchte dem User ermöglichen, in einem kleinen Frame die gewünschte Diskette zu laden. (Image)

    Dieses funktioniert auch soweit, allerdings kann ich das Frame nicht in den Vordergrund stellen.

    selectDSK.png

    Hierbei handelt es sich nicht um mein (vielleicht schon bekanntes) Projekt JavaCPC.

    Es handelt sich um seinen viel kleineren Bruder WebCPC.

    Ein simples Applet, was die Emulation von JavaCPC kann, aber nicht signiert sein muss.

    (Gerade mal 237kb, als .jar, inklusive eingebauter ROMs)

    Hier die Fehlermeldung:

    java.security.AccessControlException: access denied (java.awt.AWTPermission setWindowAlwaysOnTop)
    
    	at java.security.AccessControlContext.checkPermission(Unknown Source)
    
    	at java.security.AccessController.checkPermission(Unknown Source)
    
    	at java.lang.SecurityManager.checkPermission(Unknown Source)
    
    	at java.awt.Window.setAlwaysOnTop(Unknown Source)
    
    	at jemu.ui.JEMU.selectDialog(JEMU.java:756)
    
    	at jemu.ui.JEMU.init(JEMU.java:96)
    
    	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    
    	at java.lang.Thread.run(Unknown Source)
    
    Ausnahme: java.security.AccessControlException: access denied (java.awt.AWTPermission setWindowAlwaysOnTop)
    
    

  11. Hallo,

    gibt es eine Möglichkeit, ausser ein Applet zu zertifizieren, dass man bei einem Frame es auch immer an oberer Stelle darstellen kann?

    
          selectDSK.setAlwaysOnTop(true);
    
          selectDSK.setVisible(true);

    Mit der Methode bekomme ich eine JAVA-Security Fehlermeldung.

    Das Frame selectDSK wird vom Applet aus geöffnet.

    Wäre klasse, wenn man das irgendwie hinbekäme, ohne, dass jeder User seine Security.policy bearbeiten muss.

    MfG

    Markus

  12. Hallo,

    da ich nun leider nicht "der" Mathematiker bin, hätte ich mal eine Frage.

    Ich bin momentan dabei, eine Anwendung zu programmieren, welche mir 2 Bytes aufzeichnet. (Linker und rechter Soundkanal)

    Dieses funktioniert soweit auch schon ganz gut, wenn da nicht dieses "aber" wäre.

    Folgendes Problem habe ich:

    Schreibe ich die Bytes, wie sie ankommen, in die WAV Datei, erhalte ich umgekehrte, negative Amplituden

    negative.png

        public void doCapture(byte a, byte {
    
            CPC.tapesample[CPC.recordcount] = a;
    
            CPC.recordcount++;
    
            CPC.tapesample[CPC.recordcount] = b;
    
            CPC.recordcount++;
    
        }[/code]
    
    
    
    
    Ändere ich diesen Code nun etwas, erhalte ich nur positive Amplituden:
    
    
    [code] public void doCapture(byte a, byte B){ CPC.tapesample[CPC.recordcount] = (byte)(a^0x80); CPC.recordcount++; CPC.tapesample[CPC.recordcount] = (byte)(b^0x80); CPC.recordcount++; }

    Kann mir jemand helfen, und mir sagen, was ich tun muss, damit ich Amplituden so erhalte, dass sie negativ/positiv sind?

    goal.png

    Dieses hier ist mein gewünschtes Ziel in der Ausgabe.

    MfG

    Markus

  13. Vielen Dank nochmal.

    Ich habe es also hinbekommen.

    Nun eine Frage:

    Damit mein Programm vernünftig läuft, habe ich diesen Parameter gesetzt:

    -Xms512m -Xmx768m -XX:MaxPermSize=256m

    Wie kann ich den Parameter auch in HTML-Code setzen, wenn ich das Ganze als Applet laufen lasse?

    Das Programm selber ist self-signed, allerdings müsste ich auch im Applet den Heap-Space erweitern. Ist das möglich?

  14.     public Object[] list()
    
        {
    
            Vector vector = new Vector();
    
            while(ivBlockPos < ivCdtFile.length)
    
            {
    
                gotoNextBlock();
    
                vector.addElement("ID: " + Array.b2x(new byte[] {
    
                    (byte)ivBlockType
    
                }) + ", pos: " + ivBlockPos + ", len: " + ivBlockLen);
    
            }
    
            return vector.toArray();
    
        }

    Wäre dieses so eine Liste?

  15. Verwende doch eine Liste, dann kannst Du problemlos Daten hinzufügen. Und mit der Methode toArray erhältst Du am Ende auch noch ein Array, wenn Du es in dieser Darstellung brauchst.

    Wie sähe das denn aus? Habe noch nie mit Listen gearbeitet...

    Kleines Beispiel wäre cool.

    Danke schonmal.

  16. Hallo zusammen,

    wie kann ich mit JAVA ein Byte Array aufbauen, wenn ich vorher die Länge noch nicht kenne?

    byte[] tapesample; ist klar...

    Nur wie kann ich es nun schrittweise erhöhen?

    Ich möchte eine Datei erzeugen, wo die Länge noch unbekannt ist.

    [Prozedur:]

    tapesample = kalkulierter Wert

    i++;

    JAVA sagt mir hier aber, dass das so nicht geht.

    Was kann ich hier machen?

  17. Hallo zusammen,

    wer kann mir hilfreich zur Seite stehen?

    Mein Problem bezieht sich auf das Lesen von ZIP-Dateien.

    Bei ZIPs mit nur einer Datei funktioniert das ja soweit ganz gut.

    Allerdings möchte ich dem User die Möglichkeit geben, wenn sich in einem ZIP mehrere Dateien befinden, auswählen zu können, welche geladen werden soll.

    Hier mein aktueller Code:

      public final InputStream openFile(String name) throws Exception {
    
        System.out.println("File: " + name);
    
        InputStream result;
    
    
       if (name.toLowerCase().endsWith(".zip")) {
    
              ZipEntry entry;
    
              ZipInputStream str = new ZipInputStream(result);
    
                while((entry = str.getNextEntry()) != null) {
    
                     zipcount++;
    
                    String EntryName = entry.getName().toLowerCase();
    
                    if(     EntryName.endsWith(".dsk")||        // amstrad diskimage
    
                            EntryName.endsWith(".cdt")||        // amstrad tape
    
                            EntryName.endsWith(".bin")||        // amstrad binary
    
                            EntryName.endsWith(".bas")||        // amstrad basic
    
                            EntryName.endsWith(".cpr")||        // amstrad + cartridge
    
                            EntryName.endsWith(".sna")||        // amstrad snapshot
    
                            EntryName.endsWith(".z80")||        // spectrum snapshot
    
                            EntryName.endsWith(".o")  ||        // zx 81 snapshot
    
                            EntryName.endsWith(".p")  ||        // zx 80 snapshot
    
                            EntryName.endsWith(".vsf")||        // vice snapshot (c64)
    
                            EntryName.endsWith(".tzx")||        // spectrum tape
    
                            EntryName.endsWith(".rom")||        // rom (general)
    
                            EntryName.endsWith(".ssd")||        // bbc diskimage
    
                            EntryName.endsWith(".fnt")||        // bbc font
    
                            EntryName.endsWith(".vz") ||        // vz 200/300 snapshot
    
                            EntryName.endsWith(".chr")||        // vz 200/300 chars
    
                            EntryName.endsWith(".wav")          // PCM .wav file
    
                            )
    
                    {
    
                        System.out.println("Reading " + entry.getName());
    
                        return str;
    
                    }
    
                    else
    
                        System.out.println("Skipping " + entry.getName());
    
                }
    
              System.out.println("ZIP entries:" + zipcount);
    
              zipcount = 0;
    
       }
    
    
    
        return result;
    
      }

    Hierbei handelt es sich NICHT um eine Haus- oder Prüfungsaufgabe, sondern soll meinen Emulator verbessern.

    Deshalb nutzt mir leider auch wenig ein Hinweis auf JAVA-Handbücher oder ähnliches.

    Ich habe schon einiges an entsprechenden Quellen durchforstet, bin aber leider noch nicht dahinter gekommen, wie ich dieses nun Bewerkstelligen kann.

    Ist nur eine Datei in dem ZIP, soll diese einfach gelesen werden.

    Sind 2 oder mehr Dateien in dem ZIP, sollte der User ein Fenster bekommen mit einer Auswahlliste für die einzelnen Dateien.

    In der 'While - Schleife" habe ich schon versucht, einen Dialog einzubauen, ob die aktuelle Datei gelesen werden soll oder nicht. Aber irgendwie hat das nicht funktioniert.

    (Abfrage per Dialogbox, ob geladen werden soll oder nicht,

    Wenn ja: return str;

    Wenn nein: setze While-Schleife fort..)

    Ich wäre hier wirklich für jede Hilfe dankbar.

    MfG

    Markus

  18. Hallo zusammen,

    Emulator entwickeln macht ja Freude, aber auch Leid ;-)

    Ich habe da ein Problem festgestellt, welches in meinem JavaCPC Emulator auftritt, wenn ich den zu emulierenden Computer wechsele:

    Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Buffers have not been created
    
    	at sun.awt.windows.WComponentPeer.getBackBuffer(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.getBackBuffer(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.updateInternalBuffers(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.revalidate(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.revalidate(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.getDrawGraphics(Unknown Source)
    
    	at javax.swing.BufferStrategyPaintManager.prepare(Unknown Source)
    
    	at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
    
    	at javax.swing.RepaintManager.paint(Unknown Source)
    
    	at javax.swing.JComponent.paint(Unknown Source)
    
    	at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
    
    	at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
    
    	at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
    
    	at java.awt.Container.paint(Unknown Source)
    
    	at javaxDisplay Lost Focus
    
    .swing.RepaintManager.paintDirtyRegions(Unknown Source)
    
    	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    
    	at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
    
    	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
    
    	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    
    	at java.awt.EventDispatchThread.run(Unknown Source)
    
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Buffers have not been created
    
    	at sun.awt.windows.WComponentPeer.getBackBuffer(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.getBackBuffer(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.updateInternalBuffers(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.revalidate(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.revalidate(Unknown Source)
    
    	at java.awt.Component$FlipBufferStrategy.getDrawGraphics(Unknown Source)
    
    	at javax.swing.BufferStrategyPaintManager.prepare(Unknown Source)
    
    	at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
    
    	at javax.swing.RepaintManager.paint(Unknown Source)
    
    	at javax.swing.JComponent.paint(Unknown Source)
    
    	at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
    
    	at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
    
    	at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
    
    	at java.awt.Container.paint(Unknown Source)
    
    	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    
    	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    
    	at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
    
    	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
    
    	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    
    	at java.awt.EventDispatchThread.run(Unknown Source)

    Leider geht von dieser Fehlermeldung keinerlei Anhaltspunkt darauf zurück, wo in meinem Code ein eventueller Fehler sich hat einschleichen können.

    Weiss hier jemand Rat?

    (Bis auf die Ausgabe dieser Meldung in die JAVA-Konsole hat dieser Fehler allerdings keinerlei Auswirkung, es funktioniert trotzdem alles, wie es soll. Nur so eine Meldung macht sich unschön...)

    MfG

    Markus

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...