Zum Inhalt springen

Devilmarkus

Mitglieder
  • Gesamte Inhalte

    158
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Devilmarkus

  1. Hi Vash, ich möchte ja das Gegenteil: Die Zahlen müssen ja sogar von meinem Emulator kommen. Um zu Verhindern, dass jemand be*******t, dachte ich da an ein Emulator-internes Passwort, welches mit gesendet wird, und dass nur bei dem Passwort ein Eintrag gespeichert wird. Wie genau das ablaufen soll, weiss ich allerdings noch nicht. Eventuell mit einem mit .htaccess angelegtem Verzeichnisschutz? Im Emulator wird es später einen internen Parameter geben, welcher Features, wie den Debugger, und auch die Möglichkeit, Dateien zu laden / speichern, und halt alles, was Manipulation möglich machen würde, deaktiviert. 100%ig wird man besch.... natürlich wohl nicht unterbinden können... Es soll ja auch erstmal nur ein Versuch werden, wo von einem speziellen Spiel die Highscores geschrieben werden würden. Nochwas: Highscores werden dann auch nur von einem Spiel geschrieben, welches intern modifiziert wurde (Es werden ein paar Bytes im Code geändert, und nur wenn diese Codes abgeglichen werden, werden auch die Punkte ausgegeben.) Möglicherweise besteht ein Spiel anschliessend auch aus nur einer einzigen Datei, welche nicht von einer virtuellen Disk gelesen wird, sondern direkt in den Emulator vom Server importiert wird (Lädt dann im Bruchteil einer Sekunde, Import-Funktionen sind schon integriert... Beispiel: http://cpc-live.com/videos/cngimport ) MFG Markus Edit: Eventuell kann ich auch auf solchen Seiten auf das BASIC-Rom verzichten, so dass der User ausserhalb einer Anwendung keinerlei Einwirkung mehr auf den Emulator haben kann. Beispiel: http://www.evilamarkus.de/videos/console
  2. Habe es herausgefunden: if (name.toLowerCase().endsWith(".zip")) { ZipEntry entry; ZipInputStream str = new ZipInputStream(result); while((entry = str.getNextEntry()) != null) { System.out.println("Reading " + entry.getName()); if(!entry.getName().toLowerCase().endsWith(".diz")) return str; } } Danke für die Hilfe.
  3. Klingt logisch... Nur: Wie implementiere ich das nun in meinen Code? ich benötige als 'result' einen java.io.InputStream.
  4. Hallo, wie kann ich die in einigen ZIP-Archiven enthaltene 'file_id.diz' Datei umgehen beim einlesen einer ZIP-Datei? Hier mein Code zum Einlesen: public InputStream openFile(String name) throws Exception { System.out.println("File: " + name); InputStream result; try { result = new URL(applet.getCodeBase(),name).openStream(); } catch(Exception e) { result = new FileInputStream(name); } if (name.toLowerCase().endsWith(".zip")) { ZipInputStream str = new ZipInputStream(result); str.getNextEntry(); result = str; } return result; } Wer kann mir nun sagen, wie ich erkennen kann, ob eine 'file_id.diz' Datei in dem ZIP ist, und wie ich diese umgehen kann? Beispiel: in dem ZIP 'test.zip' sind enthalten: - file_id.diz - test.dsk Nun möchte ich, dass nur das 'test.dsk' gelesen wird. MfG Markus
  5. Hallo Forum, ich programmiere einen Emulator in Java. Dieser wird bald in der Lage sein, Highscores an externe Anwendungen weiterzugeben. Mein Ziel ist es, für ein paar alte Spiele dieses Feature in Webseiten einzusetzen, um Highscore-Competitions ins Leben zu rufen. Ein Beispiel kann man hier sehen: In diesem Fall werden die Punkte nicht in eine externe Anwendung geschrieben, aber direkt in der oberen linken Bildschirmecke angezeigt. Nun meine Frage: Wer kennt sich ausreichend mit PHP, MySQL und eventuell noch JavaScript aus, und würde mir helfen solch ein Projekt zu entwickeln? Für das Entwickeln stelle ich selbstverständlich einen FTP Account + 1 MySQL Datenbank zur Verfügung. Bevor nun allerdings die Leute ankommen und mir versuchen, PHP oder ähnliches beizubringen: Ich benötige wirklich die kompletten Scripte. Mir in meiner knappen Zeit noch PHP o.Ä. beizubringen, wird nichts bringen. Wie gesagt: Bei Interesse bitte, bitte bei mir melden. (Oder auf diesen Thread antworten) Ziel: Mein Emulator gibt Punkte als String oder auch als Zahlenwert an ein PHP-Script weiter, welches diesen Wert in einer Datenbank vergleicht, und, falls dieser Wert höher ist, als 10 TOP-Scores, dann den User nach Benutzernamen fragt und die Punkte mit Benutzernamen abspeichert. In einer weiteren PHP Datei möchte ich dann die Highscores anzeigen lassen. Bitte meldet Euch. MfG Markus P.S.: Ich würde auch später gerne ein "About" in der späteren Webseite angeben, falls erwünscht. Nur Zahlen kann / möchte ich nichts für diese Hilfe, da ja mein Emulator auch Freeware & Open Source ist.
  6. Habe es nun so gelöst: String selectedHeader = JOptionPane.showInputDialog(dummy, oheader,Sadr); if ( selectedHeader == null) return;
  7. Hallo zusammen, ich benötige eine Hilfe, wie ich aus folgendem Dialog den "Abbrechen" Button entfernen kann. Der Dialog soll nur einen "OK" Button verwenden. mein Code dafür ist: .... Object[] oheader = {"AMSDOS header found...\n\n" + "&" + Sadr +" - Load adress\n"+ "&" + Slen +" - File length\n" + "&" + Sexc +" - Exec. adress\n\n" + "Filetype is: " + ftype+"\n\n" + "Enter start adress:\n(Hexadecimal)"}; String selectedHeader = JOptionPane.showInputDialog(dummy, oheader,Sadr); .... Hoffe, dass mir jemand helfen kann... MfG Markus
  8. Problem selber gelöst: public void screenshot(){ if (executable) frame.setAlwaysOnTop(false); computer.stop(); display.grabFocus(); display.requestFocus(); try { Rectangle rect = new Rectangle(display.getBounds()); rect.setLocation(display.getLocationOnScreen()); Robot robot = new Robot(); images = robot.createScreenCapture(rect); File file; screenPreview(); pngFilter = new PNGFileFilter(); savePngFileChooser.setFileFilter(pngFilter); savePngFileChooser.setDialogTitle("Save Screenshot..."); savePngFileChooser.setFileSelectionMode(2); screenpreview.setAlwaysOnTop(false); int result = savePngFileChooser.showSaveDialog(this); screenpreview.dispose(); if (result == JFileChooser.APPROVE_OPTION) { String savename=savePngFileChooser.getSelectedFile().toString(); if (savename.toLowerCase().endsWith(".png")) System.out.print(""); else savename=savename+".png"; file = new File(savename); ImageIO.write(images, "png", file); } } catch (Exception e) { System.out.println(e.getMessage()); } screenshottimer = 0; computer.start(); if (executable) frame.setAlwaysOnTop(onTop); } protected void screenPreview(){ screenpreview = new JFrame(){ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { screenpreview.dispose(); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; screenpreview.setTitle("Screenshot"); ImageIcon spr = null; spr = new ImageIcon(images); sprev = new JLabel(spr); screenpreview.add(sprev); screenpreview.pack(); screenpreview.setLocation(0, 0); screenpreview.setAlwaysOnTop(true); screenpreview.setVisible(true); }
  9. Nun also der Screenshot wird schon im Programm generiert. Hier der zusammenhängende Code: public void screenshot(){ computer.stop(); display.grabFocus(); display.requestFocus(); JFileChooser savePngFileChooser; try { Rectangle rect = new Rectangle(display.getBounds()); rect.setLocation(display.getLocationOnScreen()); Robot robot = new Robot(); images = robot.createScreenCapture(rect); File file; screenPreview(); savePngFileChooser = new JFileChooser(); pngFilter = new PNGFileFilter(); savePngFileChooser.setFileFilter(pngFilter); savePngFileChooser.setDialogTitle("Save Screenshot..."); savePngFileChooser.setFileSelectionMode(2); int result = savePngFileChooser.showSaveDialog(this); screenpreview.dispose(); if (result == JFileChooser.APPROVE_OPTION) { //Save the screenshot as a png String savename=savePngFileChooser.getSelectedFile().toString(); if (savename.endsWith(".PNG".toUpperCase())) System.out.print(""); else savename=savename+".png"; file = new File(savename); ImageIO.write(images, "png", file); } screenshottimer = 0; computer.start(); } catch (Exception e) { System.out.println(e.getMessage()); } } protected void screenPreview(){ final Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); screenpreview.setTitle("Screenshot"); ImageIcon spr = null; spr = new ImageIcon(images); sprev = new JLabel(spr); screenpreview.add(sprev); screenpreview.pack(); screenpreview.setLocation((d.width - screenpreview.getSize().width), (0)); screenpreview.setAlwaysOnTop(true); screenpreview.setVisible(true); } JFrame screenpreview = new JFrame(){ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { screenpreview.dispose(); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; Ist natürlich nicht komplett... einige initialisitionen fehlen, sind aber vorhanden...
  10. Hallo zusammen, momentan befasse ich mich mit Screenshotspeicherung. Dabei tritt folgendes Problem auf: Der Screenshot wird zwar richtig gespeichert, allerdings kann ich das "Vorschaufenster" nicht aktualisieren. protected void screenPreview(){ final Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); screenpreview.setTitle("Screenshot"); ImageIcon spr = null; spr = new ImageIcon(images); sprev = new JLabel(spr); screenpreview.add(sprev); screenpreview.pack(); screenpreview.setLocation((d.width - screenpreview.getSize().width), (0)); screenpreview.setAlwaysOnTop(true); screenpreview.setVisible(true); } JFrame screenpreview = new JFrame(){ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { screenpreview.dispose(); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; Dieses soll das "Vorschaufenster" sein. Nimmt man nun den ersten Screenshot auf, wird dieser auch korrekt angezeigt. Will man allerdings einen weiteren speichern, wird immernoch der alte angezeigt, obwohl das Fenster geschlossen wurde (dispose() Wie bekommt ich es eventuell hin, das Fenster dennoch aktuell zu haben? (images ist das Bild, welches in der Zwischenablage ist) MfG Markus
  11. Hallo zusammen, für ein Projekt von mir würd ich gerne wissen, ob und wie man eine deutsche Tastatureingabe auf eine englische Tastatureingabe um-mappen kann. Das Problem: Ich emuliere in JAVA die Schneider / Amstrad CPC Homecomputer. Dort funzt die Tastatureingabe aber nur dann 100%, wenn ich lokal auf meinem PC die Tastatur auf Englisch umstelle. Kann man dieses nicht auch in Java für eben diese Anwendung tun? Hier meine Keyboard.java: package jemu.system.cpc; import java.awt.event.*; import jemu.core.*; import jemu.core.device.keyboard.*; /** * Title: JEMU * Description: The Java Emulation Platform * Copyright: Copyright (c) 2008 * Company: * @author Markus * @version 5.1 */ public abstract class Keyboard extends MatrixKeyboard { protected int[] bytes = new int[16]; protected int row = 0; public Keyboard() { super("CPC Keyboard",8,10); for (int i = 0; i < bytes.length; i++) bytes[i] = 0xff; setKeyMappings(); reset(); } protected abstract void setKeyMappings(); protected void keyChanged(int col, int row, int oldValue, int newValue) { if (oldValue == 0) { if (newValue != 0) bytes[row] &= (0x01 << col) ^ 0xff; } else if (newValue == 0) bytes[row] |= (0x01 << col); } public void setSelectedRow(int value) { row = value; } public int readSelectedRow() { return bytes[row]; } } Dazu gehörend: KeyboardA.java package jemu.system.cpc; import java.awt.event.*; /** * Title: JEMU * Description: The Java Emulation Platform * Copyright: Copyright (c) 2002-2008 * Company: * @author: Markus * @version 5.1 * * */ public class KeyboardA extends Keyboard { protected static final int[] KEY_MAP = { // Row 0 KeyEvent.VK_UP, KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN, KeyEvent.VK_F9, KeyEvent.VK_F6, KeyEvent.VK_F3, KeyEvent.VK_END, KeyEvent.VK_DECIMAL, // Row 1 KeyEvent.VK_LEFT, KeyEvent.VK_ALT, KeyEvent.VK_F7, KeyEvent.VK_F8, KeyEvent.VK_F5, KeyEvent.VK_F1, KeyEvent.VK_F2, KeyEvent.VK_F12, // Row 2 -1/*KeyEvent.VK_BACK_QUOTE*/, KeyEvent.VK_ALT_GRAPH, KeyEvent.VK_ENTER, KeyEvent.VK_CLOSE_BRACKET, KeyEvent.VK_F4, KeyEvent.VK_SHIFT, KeyEvent.VK_BACK_SLASH, KeyEvent.VK_CONTROL, // Row 3 KeyEvent.VK_EQUALS, KeyEvent.VK_MINUS, KeyEvent.VK_OPEN_BRACKET, KeyEvent.VK_P, KeyEvent.VK_QUOTE, KeyEvent.VK_SEMICOLON, KeyEvent.VK_SLASH, KeyEvent.VK_PERIOD, // Row 4 KeyEvent.VK_0, KeyEvent.VK_9, KeyEvent.VK_O, KeyEvent.VK_I, KeyEvent.VK_L, KeyEvent.VK_K, KeyEvent.VK_M, KeyEvent.VK_COMMA, // Row 5 KeyEvent.VK_8, KeyEvent.VK_7, KeyEvent.VK_U, KeyEvent.VK_Y, KeyEvent.VK_H, KeyEvent.VK_J, KeyEvent.VK_N, KeyEvent.VK_SPACE, // Row 6 KeyEvent.VK_6, KeyEvent.VK_5, KeyEvent.VK_R, KeyEvent.VK_T, KeyEvent.VK_G, KeyEvent.VK_F, KeyEvent.VK_B, KeyEvent.VK_V, // Row 7 KeyEvent.VK_4, KeyEvent.VK_3, KeyEvent.VK_E, KeyEvent.VK_W, KeyEvent.VK_S, KeyEvent.VK_D, KeyEvent.VK_C, KeyEvent.VK_X, // Row 8 KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_ESCAPE, KeyEvent.VK_Q, KeyEvent.VK_TAB, KeyEvent.VK_A, KeyEvent.VK_CAPS_LOCK, KeyEvent.VK_Z, // Row 9 KeyEvent.VK_NUMPAD8, KeyEvent.VK_NUMPAD2, KeyEvent.VK_NUMPAD4, KeyEvent.VK_NUMPAD6, KeyEvent.VK_NUMPAD5, KeyEvent.VK_NUMPAD0, -1, KeyEvent.VK_BACK_SPACE }; public void setKeyMappings() { addKeyMappings(KEY_MAP); // For MS JVM, these keys have different codes addKeyMapping(0xba,5,3); // VK_SEMICOLON = 0xba addKeyMapping(0xbc,7,4); // VK_COMMA = 0xbc addKeyMapping(0xbd,1,3); // VK_MINUS = 0xbd addKeyMapping(0xbe,7,3); // VK_PERIOD = 0xbe addKeyMapping(0xdb,2,3); // VK_OPEN_BRACKET = 0xdb addKeyMapping(0xdd,3,2); // VK_CLOSE_BRACKET = 0xdd } } Wer kann mir helfen???? LG Markus EDIT: Hier noch meine MatrixKeyboard.java: package jemu.core.device.keyboard; import java.awt.event.*; import java.util.*; import jemu.core.*; import jemu.core.device.*; /** * Title: JEMU * Description: The Java Emulation Platform * Copyright: Copyright (c) 2007 * Company: * @author * @version 1.0 */ public class MatrixKeyboard extends Device { public static final int KEY_RIGHT = 0x10000; protected int[] pressMap = new int[0x1000]; // Each key has a count of Java keys pressed for that key protected int[][] keyMap; // Each Integer Java key is mapped in this table to a mapping array protected Hashtable mappings = new Hashtable(); public MatrixKeyboard(String type, int cols, int rows) { super("Matrix Keyboard"); keyMap = new int[rows][cols]; } public void reset() { for (int row = 0; row < keyMap.length; row++) { int[] keyRow = keyMap[row]; for (int col = 0; col < keyRow.length; col++) setKeyMap(col,row,0); } } protected void setKeyMap(int col, int row, int value) { int oldValue = keyMap[row][col]; if (oldValue != value) { keyMap[row][col] = value; //System.out.println("Key Changed: " + col + ", " + row); keyChanged(col,row,oldValue,value); } } public boolean isKeyPressed(int col, int row) { return row >= 0 && row < keyMap.length && col >= 0 && col < keyMap[row].length && keyMap[row][col] != 0; } protected void keyChanged(int col, int row, int oldValue, int newValue) { } public void addKeyMapping(int key, int col, int row) { KeyMapping mapping = (KeyMapping)mappings.get(new Integer(key)); if (mapping == null) { mapping = new KeyMapping(); mappings.put(new Integer(key),mapping); } mapping.addMapping(col,row); } public void addKeyMappings(int[] map) { int cols = keyMap[0].length; for (int i = 0; i < map.length; i++) if (map[i] != -1) addKeyMapping(map[i],i % cols,i / cols); } public void addKeyMappings(int[][] map) { for (int row = 0; row < map.length; row++) { for (int col = 0; col < map[row].length; col++) if (map[row][col] != -1) addKeyMapping(map[row][col],col,row); } } public void removeKeyMapping(int key, int col, int row) { KeyMapping mapping = (KeyMapping)mappings.get(new Integer(key)); if (mapping != null) { mapping.removeMapping(col,row); if (mapping.getCount() == 0) mappings.remove(mapping); } } public void keyPressed(int key) { keyPressed(key,KeyEvent.KEY_LOCATION_UNKNOWN); } public void keyPressed(int key, int location) { keyChange(key,location,1); } public void keyReleased(int key) { keyReleased(key,KeyEvent.KEY_LOCATION_UNKNOWN); } public void keyReleased(int key, int location) { keyChange(key,location,-1); } protected void keyChange(int key, int location, int step) { // System.out.println("key=" + Util.hex((short)key)); int mask = 0x01 << (key & 0x1f); boolean right = location == KeyEvent.KEY_LOCATION_RIGHT; int offs = right ? 0x800 + key / 32 : key / 32; if (step != 1 || (pressMap[offs] & mask) == 0) { KeyMapping mapping = null; if (right) mapping = (KeyMapping)mappings.get(new Integer(key | KEY_RIGHT)); if (mapping == null) mapping = (KeyMapping)mappings.get(new Integer(key)); if (mapping != null) mapping.keyChange(step); if (step == 1) pressMap[offs] |= mask; else pressMap[offs] &= mask ^ 0xffffffff; } } protected class KeyMapping { protected int[] cols = new int[0]; protected int[] rows = new int[0]; protected void addMapping(int col, int row) { cols = Util.arrayInsert(cols,cols.length,1,col); rows = Util.arrayInsert(rows,rows.length,1,row); } protected void removeMapping(int col, int row) { for (int i = 0; i < cols.length; i++) { if (cols[i] == col && rows[i] == row) { cols = Util.arrayDelete(cols,i,1); rows = Util.arrayDelete(rows,i,1); break; } } } protected int getCount() { return cols.length; } protected void keyChange(int step) { for (int i = 0; i < cols.length; i++) { int col = cols[i]; int row = rows[i]; setKeyMap(col,row,Math.max(0,keyMap[row][col] + step)); } } } }
  12. Ich habe in meinem JavaCPC Emulator die Java-Konsole umgeleitet: package jemu.ui; /** * Title: JEMU by cpc.devilmarkus.de / jemu.winape.net * Description: JAVA emulator for Amstrad Homecomputers * Copyright: Copyright (c) 2002-2008 * Company: * @author Devilmarkus * @version 4.0 * * */ import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class Console extends WindowAdapter implements WindowListener, ActionListener, Runnable { public static JFrame frameconsole; private JTextArea textArea; private Thread reader; private Thread reader2; private boolean quit; JButton button=new JButton("Clear"); JButton button2=new JButton("Copy"); private final PipedInputStream pin=new PipedInputStream(); private final PipedInputStream pin2=new PipedInputStream(); public Console() { // create all components and add them frameconsole=new JFrame("JavaCPC Console"); Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize=new Dimension((int)(screenSize.width/2),(int)(screenSize.height/2)); int x=(int)(frameSize.width/2); int y=(int)(frameSize.height/2); frameconsole.setBounds(x,y,500,500); textArea=new JTextArea(); textArea.setEditable(true); textArea.setAutoscrolls(true); textArea.setBackground(Color.BLACK); textArea.setForeground(Color.GREEN); textArea.setCaretColor(Color.WHITE); textArea.setSelectedTextColor(Color.RED); textArea.setSelectionColor(Color.ORANGE); textArea.setBorder(new BevelBorder(BevelBorder.LOWERED)); textArea.setFont(new Font("", 1, 10)); button.setForeground(Color.RED); button.setBackground(Color.DARK_GRAY); button.setBorder(new BevelBorder(BevelBorder.RAISED)); button.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.HAND_CURSOR)); button2.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.HAND_CURSOR)); button2.setForeground(Color.YELLOW); button2.setBackground(Color.DARK_GRAY); button2.setBorder(new BevelBorder(BevelBorder.RAISED)); frameconsole.getContentPane().setLayout(new BorderLayout()); frameconsole.getContentPane().add(new JScrollPane(textArea),BorderLayout.CENTER); frameconsole.getContentPane().add(button2,BorderLayout.NORTH); frameconsole.getContentPane().add(button,BorderLayout.SOUTH); frameconsole.setAlwaysOnTop(true); frameconsole.setVisible(false); frameconsole.addWindowListener(this); button.addActionListener(this); button2.addActionListener(this); button.setFocusable(false); button2.setFocusable(false); try { PipedOutputStream pout=new PipedOutputStream(this.pin); System.setOut(new PrintStream(pout,true)); } catch (java.io.IOException io) { textArea.append("Couldn't redirect STDOUT to this console\n"+io.getMessage()); } catch (SecurityException se) { textArea.append("Couldn't redirect STDOUT to this console\n"+se.getMessage()); } try { PipedOutputStream pout2=new PipedOutputStream(this.pin2); System.setErr(new PrintStream(pout2,true)); } catch (java.io.IOException io) { textArea.append("Couldn't redirect STDERR to this console\n"+io.getMessage()); } catch (SecurityException se) { textArea.append("Couldn't redirect STDERR to this console\n"+se.getMessage()); } quit=false; // signals the Threads that they should exit // Starting two seperate threads to read from the PipedInputStreams // reader=new Thread(this); reader.setDaemon(true); reader.start(); // reader2=new Thread(this); reader2.setDaemon(true); reader2.start(); System.out.println("JavaCPC by Devilmarkus"); System.out.println("Feel free to use this console as notepad, too..."); } public synchronized void windowClosing(WindowEvent evt) { frameconsole.setVisible(false); // default behaviour of JFrame frameconsole.dispose(); } public synchronized void actionPerformed(ActionEvent evt) { if (evt.getSource() == button) { textArea.setText("JavaCPC by Devilmarkus\nconsole cleared...\n"); } if (evt.getSource() == button2) { textArea.selectAll(); textArea.copy(); System.out.println("Console content copied to clipboard."); } } public synchronized void run() { try { while (Thread.currentThread()==reader) { try { this.wait(100);}catch(InterruptedException ie) {} if (pin.available()!=0) { String input=this.readLine(pin); textArea.append(input); textArea.select(2000000000, 2000000000); } if (quit) return; } while (Thread.currentThread()==reader2) { try { this.wait(100);}catch(InterruptedException ie) {} if (pin2.available()!=0) { String input=this.readLine(pin2); textArea.append(input); textArea.select(2000000000, 2000000000); } if (quit) return; } } catch (Exception e) { textArea.append("\nConsole reports an Internal error."); textArea.append("The error is: "+e); } } public synchronized String readLine(PipedInputStream in) throws IOException { String input=""; do { int available=in.available(); if (available==0) break; byte b[]=new byte[available]; in.read(; input=input+new String(b,0,b.length); }while( !input.endsWith("\n") && !input.endsWith("\r\n") && !quit); return input; } }[/code] In der Main-Klasse rufe ich nun diese Konsole auf: [code].......... public void start() { .......... new Console(); ........ Die Konsole läuft also im Hintergrund... Anschliessend, wenn ich die Konsole öffnen will: Console.frameconsole.setVisible(true); Ich hoffe, das hilft... Edit: So schaut das Ergebnis aus. Es hat ein Design und 2 Knöpfe: - Konsole leeren - Inhalt in die Zwischenablage kopieren - Ausserdem kann man die Konsole für Notizen verwenden (Finde ich nützlich)
  13. Antwort selbst herausgefunden: final URL floppyicon = getClass().getResource("image/disc.gif"); final Image floppy = getToolkit().getImage(floppyicon); :upps Hätt' ich auch gleich drauf kommen können... Vielleicht kanns ja der Ein oder Andere brauchen. Nicht vergessen: java.net.URL importieren
  14. Hallo zuammen, ich möchte ein paar Icons erstellen, welche mit 'drawImage(img,x,y);' dargestellt werden sollen. Dabei möchte ich auf Bilder, die im .JAR Archiv mit den .class-Dateien gemeinsam abgelegt werden, zurückgreifen. final Image floppy = getToolkit().getImage("disc.gif"); Das sieht nett aus, funktioniert aber nur mit Bildern ausserhalb des Archives. Wie kann ich das ändern? MfG Markus
  15. Hallo, ich habe es heute hinbekommen.... Der Code mag zwar seltsam erscheinen, aber so funzt es: public void mouseMoved(MouseEvent me) { xoldpos = xpos; yoldpos = ypos; Display.xpos = xpos; Display.ypos = ypos; xpos = me.getX(); ypos = me.getY(); if (mousejoy){ if (xoldpos <= xpos - 1){ Switches.directR = 0; Switches.directxR = "Right"; Switches.directxL = "Stop"; } else if (xoldpos >= xpos + 1){ Switches.directL = 0; Switches.directxR = "Stop"; Switches.directxL = "Left"; } xoldpos = xpos; if (yoldpos >= ypos + 1){ Switches.directU = 0; Switches.directyU = "Up"; Switches.directyD = "Stop"; } else if (yoldpos <= ypos - 1){ Switches.directD = 0; Switches.directyU = "Stop"; Switches.directyD = "Down"; } yoldpos = ypos; } } In dem System passiert dann folgendes: public void joyReader(){ if (Switches.MouseJoy){ if (Switches.directxR.equals("Right")) keyboarda.keyPressed(KeyEvent.VK_NUMPAD6); if (Switches.directxL.equals("Left")) keyboarda.keyPressed(KeyEvent.VK_NUMPAD4); if (Switches.directyU.equals("Up")) keyboarda.keyPressed(KeyEvent.VK_NUMPAD8); if (Switches.directyD.equals("Down")) keyboarda.keyPressed(KeyEvent.VK_NUMPAD2); Switches.directL++; if (Switches.directL >= 4){ keyboarda.keyReleased(KeyEvent.VK_NUMPAD4); } Switches.directR++; if (Switches.directR >= 4){ keyboarda.keyReleased(KeyEvent.VK_NUMPAD6); } Switches.directU++; if (Switches.directU >= 4){ keyboarda.keyReleased(KeyEvent.VK_NUMPAD8); } Switches.directD++; if (Switches.directD >= 4){ keyboarda.keyReleased(KeyEvent.VK_NUMPAD2); } } } Wie gesagt: Der Code mag etwas umständlich sein, aber so funktioniert es. Testen kann man das Ganze hier: JavaCPC - CPC Games to play online with your browser Wenn der Emulator geöffnet wurde, erscheint oben Rechts ein Menü. Dort "Settings -> Joystick -> Mousejoystick" aktivieren. Man kann nun in der Oberfläche (SymbOS) den Mauspfeil mit der Maus auch bewegen... Maustasten sind auch zugewiesen. Gruss, Markus P.S.: Wenn jemand eine elegantere Lösung wüsste, dann wäre es nett, dieses hier zu posten.
  16. Hallo zusammen, Ich habe nun sämtliche Suchmaschinen betätigt, aber leider nicht gefunden, was mir weiterhelfen könnte.... Folgendes Problem: Ich benötige eine Routine, welche mir anzeigt, in welche Richtung die Maus bewegt wird.... Beispiel: Man bewegt die Maus hoch -> Ausgabe: "Rauf" runter -> "Runter".... etc.... Ich weiss zwar, wie ich die X-Y Koordinaten auslesen kann, aber das hilft mir nicht wirklich weiter... Ich möchte, dass man die Maus wie einen Joystick später benutzen kann. Wie ich auf einzelne Richtungen (was mir halt fehlt) die entsprechenden Tasten zuweisen kann, weiss ich. Eine sehr simple Bewegung habe ich auch schon hinbekommen, diese scheitert aber schon daran, wenn z.B. die Maus diagonal bewegt wird. Vielleicht weiss ja jemand Rat? public void mouseMoved(MouseEvent me) { int xoldpos = xpos; int yoldpos = ypos; xpos = me.getX(); ypos = me.getY(); if (xoldpos <= xpos - 3){ Switches.direct = "Right"; xoldpos = xpos; yoldpos = ypos;} else if (xoldpos >= xpos + 3){ Switches.direct = "Left"; xoldpos = xpos; yoldpos = ypos;} // else ??? if (yoldpos >= ypos + 3){ Switches.direct = "Up"; xoldpos = xpos; yoldpos = ypos;} else if (yoldpos <= ypos - 3){ Switches.direct = "Down"; xoldpos = xpos; yoldpos = ypos;} Display.xpos = xpos; Display.ypos = ypos; } Das ist mein Versuch, aber irgendwie klappt das nicht so, wie ich es bräuchte...
  17. Jetzt mal ernsthaft: kann man Joysticksignale bzw Maussignale so umwandeln, dass sie einen KeyEvent aufrufen? Z.B.: Man bewegt die Maus nach rechts, und im Emulator wird die Taste 'Joystick Rechts' gedrückt... Etc....
  18. Normal gilt folgende Tastaturbelegung: - Normale Buchstaben und Ziffern zum schreiben - Zehnerblock rechts bei Num-Lock ein: Joystickabfrage: 4,8,6,2 - Richtungen, 5 - Feuer Man kann allerdings auf eine alternative Joystickabfrage umschalten: - Wenn der Haken gesetzt wird bei "Q,A,O,P, SPACE, CTRL Joystick" liegen die Joysticktasten dort. Q,A - Rauf/Runter O,P - Links/Rechts SPACE,CTRL(STRG) - Feuer 1, Feuer 2 Einige Spiele bieten auch an, die Tasten zu konfigurieren. Einen echten Joystick bzw ein Gamepad kann man leider nicht benutzen (Ausser, man zeigt mir, wie man Joystick-Signale in KeyEvents umwandeln kann, was cool wäre, weil man so auch die Maus auf Joysticksignale umschalten könnte) MfG Markus [Edit]: Einige Spiele verlangen, dass man 1 oder 2 drücken muss, um etwas zu erreichen. Dies kann manchmal auf F1 oder F2 liegen... (F1-F9 = F-Tasten 1-9, F12 = F0)
  19. Gut, dass Geschmäcker verschieden sind *grins* An der Startseite werde ich aber nochmal arbeiten... Damit bin ich selbst noch nicht ganz zufrieden. Der Rest wird aber so bleiben. Mir war es wichtiger, die Seite übersichtlich und einfach zu halten, als viel "brimborium" drumherum zu machen... Bin aber gerne für Kritik und Anregungen offen. (Schaut dazu am besten mal in mein Forum, dort gibt es einen Punkt, wo man soetwas posten kann. Dieses dann aber bitte auf Englisch, da die Seite überwiegend von Engländern, Griechen, Spaniern und Franzosen benutzt wird.) Gruss, Markus
  20. Hallo zusammen, vor einiger Zeit habt Ihr mir sehr geholfen, bei einem Problem mit JAVA. Deshalb möchte ich mal an dieser Stelle Danke sagen und Euch einladen, auf meiner Webseite mein Java Projekt zu testen. JavaCPC - CPC Games to play online with your browser ist nun seit ein paar Tagen online und bietet Euch jede Menge 'echte' Spiele in einem Java-Emulator für den Schneider/Amstrad CPC an. Der Clou: Die Spiele sind keine "Roms" oder "Schnappschüsse", sondern sind 1:1 Abbilder der Disketten. Dank Eurem Forum habe ich es geschafft, diese automatisch laden zu lassen... (Siehe dazu diesen Beitrag: http://forum.fachinformatiker.de/java/114611-string-einzelne-keyevents-umwandeln-geht.html ) Nochmal Danke an Euch und viel Spass beim Spielen Markus
  21. Heute habe ich einen experimentiellen Prototypen für "Autotype" fertiggestellt. So sieht das Ganze aus... Fragt mich nicht nach dem Code Der ist so zerwurschtelt, aber funktioniert Gruss, Markus
  22. Hallo Newlukai, Dein Ansatz war echt gut! Habe dank ein paar Veränderungen das erreichen können, was ich brauchte. Man kann nun in der javacpc.ini den Wert 'autoload' angeben. Dann startet der Emulator genau dieses Programm, wenn es sich auf der eingelegten Disk (Image) befindet! Klasse! Danke Dir nochmal! Zum Probieren: Nochmal die Webstart Application öffnen. Download dieses Disk-Images: http://cpc.devilmarkus.de/clevsma.dsk Dieses durch Mausklick auf "Local File" öffnen... Dann nochmal den Emulator schliessen. Nun einfach mal die 'javacpc.ini" mit nem Texteditor bearbeiten und folgende Zeile hinzufügen: autoload=clever Nun nochmal die Webstart Application starten. Anmerkung: javacpc.ini wird bei Benutzung mit dem IE auf den Desktop geschrieben. Bei Firefox-Benutzern findet man diese in c:\programme\mozilla firefox\ Nach einmaligem Aufruf dieses "autoloads" wird es gelöscht. (Ich möchte die Funktion für ein externes Programm nutzen, welches Disk-Images in Emulatoren einbindet und per autoload-funktion eben ein Programm gestartet werden kann)
  23. Hi Newlukai, leider funktioniert Dein Vorschlag nicht. Er fragt nach convertCharToVK (ist nicht definiert) Und er schreibt, dass incompatible types gefunden wurden. (Required int, found convertCharToVK) Trotzdem danke für Deine Mühe. Vielleicht gibt es ja noch eine andere Lösung... (Die For-Schleife im cycle() ist auf jeden Fall ein guter Ansatz) Gruss, Markus Edit: Hier könnt Ihr das Applet mal als Webstart-Application testen: popup Die 4 Knöpfe oben rechts dienen der automatischen Befehlseingabe... Ziel ist, soetwas aus einem Parameter lesen zu können, und z.B. nach dem Start ein RUN"DISC" ausführen zu können. Den kompletten Source-Code gibt es für interessierte hier: SourceForge.net: JavaCPC - Amstrad CPC emulator in JAVA
  24. Hallo, ich möchte in einen Emulator "Autotype" implementieren. Dazu möchte ich einen String auslesen und ihn in die einzelnen Buchstaben / Zeichen zerlegen. Diese einzelnen Buchstaben sollen dann in KeyEvents umgewandelt werden. Das Problem, was sich mir auch noch bietet ist, dass die Tastaturabfrage im gegensatz zur emulierten CPU recht träge reagiert und man so die CPU erst 20.000x "cyclen" lassen muss, bevor man die nächste Taste drücken kann. Ein Beispiel, wo ich schonmal kleinere Befehle auf den Computer übertrage, habe ich (verkürzt) hier mal als Code: public int attyper = 0; public int cattyper = 0; public int cpmtyper = 0; public int rdtyper = 0; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void cycle() { this.gateArray.cycle(); this.fdc.cycle(); if ((this.audioCount += this.audioAdd / Switches.turbo) >= AUDIO_TEST) { this.psg.writeAudio(); this.audioCount -= AUDIO_TEST; } if (attyper !=0){ attyper++; if (attyper == 20000){ keyboarda.keyReleased(KeyEvent.VK_OPEN_BRACKET); attyper = 0; } } if (cpmtyper !=0){ cpmtyper++; if (cpmtyper == 20000){ keyboarda.keyReleased(KeyEvent.VK_OPEN_BRACKET); keyboarda.keyPressed(KeyEvent.VK_C); } if (cpmtyper == 40000){ keyboarda.keyReleased(KeyEvent.VK_C); keyboarda.keyPressed(KeyEvent.VK_P); } if (cpmtyper == 60000){ keyboarda.keyReleased(KeyEvent.VK_P); keyboarda.keyPressed(KeyEvent.VK_M); } if (cpmtyper == 80000){ keyboarda.keyReleased(KeyEvent.VK_M); keyboarda.keyPressed(KeyEvent.VK_ENTER); } if (cpmtyper == 100000){ keyboarda.keyReleased(KeyEvent.VK_ENTER); keyboarda.keyReleased(KeyEvent.VK_SHIFT); cpmtyper = 0; } } if (rdtyper !=0){ rdtyper++; if (rdtyper == 20000){ keyboarda.keyReleased(KeyEvent.VK_R); keyboarda.keyPressed(KeyEvent.VK_U); } if (rdtyper == 40000){ keyboarda.keyReleased(KeyEvent.VK_U); keyboarda.keyPressed(KeyEvent.VK_N); } if (rdtyper == 60000){ keyboarda.keyReleased(KeyEvent.VK_N); keyboarda.keyPressed(KeyEvent.VK_2); } if (rdtyper == 80000){ keyboarda.keyReleased(KeyEvent.VK_2); keyboarda.keyReleased(KeyEvent.VK_SHIFT); rdtyper = 0; } } if (cattyper !=0){ cattyper++; if (cattyper == 20000){ keyboarda.keyReleased(KeyEvent.VK_C); keyboarda.keyPressed(KeyEvent.VK_A); } if (cattyper == 40000){ keyboarda.keyReleased(KeyEvent.VK_A); keyboarda.keyPressed(KeyEvent.VK_T); } if (cattyper == 60000){ keyboarda.keyReleased(KeyEvent.VK_T); keyboarda.keyPressed(KeyEvent.VK_ENTER); } if (cattyper == 80000){ keyboarda.keyReleased(KeyEvent.VK_ENTER); keyboarda.keyReleased(KeyEvent.VK_SHIFT); cattyper = 0; } } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void AtKey(){ this.keyboarda.keyPressed(KeyEvent.VK_OPEN_BRACKET); attyper = 1; } public void typeCat(){ this.keyboarda.keyPressed(KeyEvent.VK_SHIFT); this.keyboarda.keyPressed(KeyEvent.VK_C); cattyper = 1; } public void typeRun(){ this.keyboarda.keyPressed(KeyEvent.VK_SHIFT); this.keyboarda.keyPressed(KeyEvent.VK_R); rdtyper = 1; } public void bootCPM(){ this.keyboarda.keyPressed(KeyEvent.VK_SHIFT); this.keyboarda.keyPressed(KeyEvent.VK_OPEN_BRACKET); cpmtyper = 1; } cycle() läuft also ständig und dort kann man einen Timer ansetzen. Die 4 Befehle danach stellen 4 verschiedene "automatische" Keyboard - Eingaben dar. Mein Ziel ist es, einen String festzulegen, diesen in die einzelnen Buchstaben zu zerlegen und diese als Tastenkette an den Computer weiterzugeben. Bitte helft mir!!!!!!!!!!!!!!!! Gruss, Markus
  25. Um mal zu verdeutlichen, worum es geht: Ich habe einen JAVA-Homecomputer Emulator für Amstrad / Schneider CPC. Dieser wertet (logischerweise) die Tastatureingabe aus. Durch 'getKeyCode' wird der Code ausgewertet. Dabei benutze ich die VK_ - events. Da diese aber vollständig nur auf einer Englischen Tastatur funktioneren (Es gibt ja keine VK_... für ö,ä,ü etc), muss ich das Applet derzeit manuell auf englische Tastatureingabe umstellen. Meine Frage hierbei ist halt, ob man das automatisch umstellen kann, oder ob es andere Möglichkeiten gibt... Ich kann leider nicht auf die VK - Events verzichten, da die komplette Tastatureingabe darauf ausgelegt ist.

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...