String by Value - Vector
lima-city → Forum → Programmiersprachen → Java
code
datei
erzeugt rufe
fehler
file
image
import
korrektur
null
private image
private string
richtig system
set
string
swing
system
test
tip
typ
vektor
-
- Fehler bereits Gefunden -
war eine nicht zugewiesene Variable.
Hallo,
ich Hoffe ihr könnt mir ein wenig weiter helfen, denn meine Code mach nicht was er soll.
Klasse Theme
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Vector; public class Theme { private Vector<Game_Card> cards; private int cardcount; public Vector<Game_Card>getcards(){ return cards; } public Theme(){ cards = new Vector<Game_Card>(); cardcount=0; read_theme(new File("sets/ravensburg1.set")); } public void test(){ for (int i =0; i< cards.size(); i++){ System.out.println ("FILE: " + cards.get(i).getCard_front_filename() ); } } private void read_theme(File theme_file){ Vector<String> card_images = new Vector<String>(); String card_background =""; String line=""; try { BufferedReader br = new BufferedReader( new FileReader(theme_file)); while ((line = br.readLine())!= null){ if (line.substring(0,10).equalsIgnoreCase("CARD_FILE=")){ cardcount++; System.out.println(line.substring(10).trim()); card_images.add(line.substring(10).trim()); }else if (line.substring(0,16).equalsIgnoreCase("CARD_BACKGROUND=")){ card_background = line.substring(16).trim(); } } br.close(); } catch (FileNotFoundException e) { System.out.println("Datei konnte nicht gelesen werden."); e.printStackTrace(); } catch (IOException e) { System.out.println("Datei konnte nicht gelesen werden."); e.printStackTrace(); } for (int i =0; i < card_images.size(); i++){ cards.add(new Game_Card(card_images.get(i).toString(), card_background)); } } }
Klasse Game Card
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.ImageObserver; import javax.swing.JPanel; public class Game_Card extends JPanel { private String card_front_filename; private String card_back_filename; private Image card_back; private Image card_front; private Image current_card_image; private int card_state; // 0 = invisible 1=card_back 2=card_front private JPanel card_panel; private int card_width; private int card_height; public Game_Card(String card_front_path, String card_back_path){ this.card_state=1; //this.setBackground(Color.RED); card_width = 150; card_height = 150; card_back = Toolkit.getDefaultToolkit().getImage(card_back_path); card_front = Toolkit.getDefaultToolkit().getImage(card_front_path); } public void set_pos(int x, int y){ this.setBounds(x, y, card_width, card_height); } public void update(Graphics g){ paint(g); } public void paint(Graphics g){ super.paint(g); if (card_state == 1){ this.current_card_image = this.card_back; this.setVisible(true); }else if (card_state == 2){ this.current_card_image = this.card_front; this.setVisible(true); }else{ this.setVisible(false); } draw_card(g, 0, 0, card_width, card_height, this, current_card_image); } public void draw_card(Graphics g, int x, int y, int w, int h, ImageObserver imgob, Image img){ Graphics2D g2 = (Graphics2D)g; RenderingHints xxx = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); xxx.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); xxx.put(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); xxx.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); xxx.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.addRenderingHints(xxx); g2.drawImage(img ,x, y, w, h,imgob); } public String getCard_front_filename() { return card_front_filename; } public String getCard_back_filename() { return card_back_filename; } public Image getCard_back() { return card_back; } public Image getCard_front() { return card_front; } public int getCard_state() { return card_state; } public void setCard_front_filename(String cardFrontFilename) { card_front_filename = cardFrontFilename; } public void setCard_back_filename(String cardBackFilename) { card_back_filename = cardBackFilename; } public void setCard_back(Image cardBack) { card_back = cardBack; } public void setCard_front(Image cardFront) { card_front = cardFront; } public void setCard_state(int cardState) { card_state = cardState; repaint(); } }
Wenn Ich eine Instanz der Klasse anlege wird eine Textdatei geparst und dann Objekte vom Typ Game_Card erzeugt.
Rufe ich die Funktion test() auf, bekomme ich als Return null und nicht mehr den Dateinamen. Weiß jemand von euch warum das so ist, bzw. wie ich das beheben könnte ? Beim Lesen bekomme ich den Dateinamen noch richtig (System.out.println(line.substring(10).trim());)
Beitrag zuletzt geändert: 30.7.2010 1:50:46 von qwertz4 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Der Fehler ist ganz Simpel: Du vergisst im Konstruktor der GameCard Klasse die Variable "card_front_filename" zu füllen. Somit bleibt diese Variable null. Hier die Korrektur:
... public Game_Card(String card_front_path, String card_back_path){ this.card_state=1; //this.setBackground(Color.RED); card_width = 150; card_height = 150; card_back = Toolkit.getDefaultToolkit().getImage(card_back_path); card_front = Toolkit.getDefaultToolkit().getImage(card_front_path); card_front_filename = card_front_path; card_back_filename = card_back_path; } ...
Und um meinem Vorredner zuzustimmen: Verwende die ArrayList statt Vector.
Grüße
Daniel
Beitrag zuletzt geändert: 16.8.2010 19:26:56 von hokigala -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage