okai
Wie gesagt, der Fehler zieht sich durch das ganze Programm:
Der Fehler beginnt nach dem Klicken auf Connect, welches zum einen Connecten soll zum anderen das XML file wechseln.
Nun zieht sich aber dieser Fehler durch denn gesammten code, von Zeile 50 bis 472
Der Fehler wurde ja von crackm ganz gut beschrieben.
die Methode die das GUI zeichnet:
Code
[JAVA=117]public void drawPhone() throws IllegalArgumentException {
try {
MediaTracker mt = new MediaTracker(this); //Konstruktor für einen neuen MediaTracker
URL strXMLurl = Screen.class.getResource("/"+strXMLfile); //URL mit dem Pfad zum XML-File
Document doc = new SAXBuilder().build(strXMLurl); //Initiiert die XML Funktion von SAX
Element root = doc.getRootElement(); //Besorgt alle Wurzelelemente aus dem XML-File
Iterator Level1 = root.getChildren().iterator(); //Bildet einen Iterator für alle Wurzelelemente
while (Level1.hasNext()) { //Geht alle WurzelElemente des XML-Files durch
Element strElement = (Element)Level1.next(); //Springt zum nächsten Element
String strLevel1 = strElement.getName(); //Besorgt den Namen des aktuelle angesteuerten Elements
Iterator Level2 = root.getChild(strLevel1).getChildren().iterator(); //Bildet einen Iterator für die 2 Ebene beim XML-File
while (Level2.hasNext()) { //Geht alle Level2 Elemente vom XML-File durch
Element strElement2 = (Element)Level2.next(); //Springt zum nächsten Element
String strLevel2 = strElement2.getName(); //Besorgt die Namen der Level2 Elemente
if (strLevel1 != "Main") {
Iterator Level3 = root.getChild(strLevel1).getChild(strLevel2).getChildren().iterator();//Bildet einen Iterator für die 3 Ebene beim XML-File
while (Level3.hasNext()) { //Geht alle Level3 Elemente vom XML-File durch
cntButton++; //Zählt die Anzahl Buttons bei jedem Durcgang um 1 hoch
Element strElement3 = (Element)Level3.next(); //Springt zum nächsten Element
Iterator Level4 = strElement3.getChildren().iterator(); //Bildet einen Iterator für die 4 Ebene beim XML-File
/*
* Definiert Bilderkoordinaten aus XML in Variabeln
* |
* |
* v
*/
int intLeft = Integer.parseInt(strElement3.getAttributeValue("left"));//X-Position innerhalb des Applets
int intTop = Integer.parseInt(strElement3.getAttributeValue("top"));//Y-Position innerhalb des Applets
int intWidth = Integer.parseInt(strElement3.getAttributeValue("width"));//Breite des Button
int intHeight = Integer.parseInt(strElement3.getAttributeValue("height"));//Höhe des Button
while (Level4.hasNext()) { //Geht die letzte Ebene des XML-File durch
Element entLevel4 = (Element) Level4.next(); //Springe zum nächsten Element
if ("Normal".equals(entLevel4.getAttribute("name").getValue())) { //Wenn Normal der Wert des Attributs "name" ist:
//Definition von Variablen für den späteren Bildausschneide Vorgang
this.imgLeft = entLevel4.getAttribute("left").getIntValue();
this.imgTop = entLevel4.getAttribute("top").getIntValue();
this.strFile = entLevel4.getAttribute("Filename").getValue();
}
if ("Hover".equals(entLevel4.getAttribute("name").getValue())) { //Wenn Normal der Wert des Attributs "name" ist:
//Definition von Variablen für den späteren Bildausschneide Vorgang
this.imgLeftH = entLevel4.getAttribute("left").getIntValue();//X-Position
this.imgTopH = entLevel4.getAttribute("top").getIntValue();//Y-Position
}
}
Color colPink = new Color(255,0,255); //Neue Farbe wird definiert
URL urlButtonN = Screen.class.getResource("/"+strFile.substring(2));//URL vom Button der im Normalzustand angezeigt werden soll
URL urlButtonH = Screen.class.getResource("/"+strFile.substring(2));//URL vom Button der Angezeigt werden soll wenn die Maus darüber ist
//Button:NORMAL
imgButton = ImageIO.read(urlButtonN); //Ladet ein Bild in den Buffer
this.imgProd = imgButton.getSource(); //Besorgt die Bilderquellen von imgButton
this.imgFilter = new TransparentFilter(colPink); //Konstruktor für einen Transparentfilter der die Frabe Pink ersetzen soll
this.imgButtonShow = createImage(new FilteredImageSource(this.imgProd, this.imgFilter));//Transparentfilter wird angewandt
this.imgButtonShow = createImage(new FilteredImageSource(this.imgButtonShow.getSource(), new CropImageFilter(imgLeft, imgTop, intWidth, intHeight)));//Bildsauschnittfilter wird angewandt
//Button:HOVER
imgButtonH = ImageIO.read(urlButtonH); //Ladet ein Bild in den Buffer
this.imgProdH = imgButtonH.getSource(); //Besorgt die Bilderquellen von imgButtonH
this.imgFilterH = new TransparentFilter(colPink); //Konstruktor vom Transparentfilter
this.imgButtonShowH = createImage(new FilteredImageSource(this.imgProdH, this.imgFilterH));//Transparentfilter wird angewandt
this.imgButtonShowH = createImage(new FilteredImageSource(this.imgButtonShowH.getSource(), new CropImageFilter(imgLeftH, imgTopH, intWidth, intHeight)));//Bildsauschnittfilter wird angewandt
arrImages[cntButton] = imgButtonShow; //Buttonarray wird aufgefüllt
mt.addImage(arrImages[cntButton], cntButton); //Fügt dem MediaTracker Grafiken hnizu
if (cntButton != 41 && cntButton != 35) { //41 = Runder Navigationsbutton
//35 = Überflüssige Taste
Icon icon = new ImageIcon(imgButtonShow); //Icon für den Normalzustand des Buttons wird erzeugt
Icon icon2 = new ImageIcon(imgButtonShowH); //Icon für den MouseOver-Zustand des Buttons wird erzeugt
butCommand[cntButton] = new JButton(icon); //Ein Button mit dem vorher erstellten Icon
butCommand[cntButton].setActionCommand(""+cntButton); //Setzt dem Button ein Kommando bei das beim Betätigen ermittelt werden kann
butCommand[cntButton].setRolloverIcon(icon2); //Setzt den Icon der im Falle des MouseOver angezeigt werden soll
butCommand[cntButton].setBorder(null); //Rahmen der Buttons wird auf 0px breite gesetzt
butCommand[cntButton].setBounds(intLeft, intTop+intSpace, intWidth, intHeight);//Positioniert den Button und legt die Grösse fest
butCommand[cntButton].setContentAreaFilled(false); //Macht den Hintergrund der Buttons Transparent
butCommand[cntButton].addActionListener(new ActionListener() { //Fügt den Buttons ein Abhörsystem bei, dass bei Knopfdruck aktiviert wird
public void actionPerformed(ActionEvent e) {
new command.Exec(e.getActionCommand()); //Ruft bei Knopfdruck eine Methode in der Klasse "Exec" auf
}
});
panel.add(butCommand[cntButton]); //Fügt den Button in die Applikation ein
}
else {
if (cntButton == 41) { //Spezialanfertigung für den runnden Navigationsbutton der die NUmmer 41 trägt
arrImgData[0] = intLeft;
arrImgData[1] = intTop;
//Erstellt denn Button für den NavigationsButton. Action: up
int posUP = intLeft+(intWidth/2-10);
JButton up = new JButton("");
up.setActionCommand(""+cntButton);
up.setContentAreaFilled(false);
up.setBounds(posUP-1, intTop+intSpace+5, 20, 20);
up.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new command.Exec(e.getActionCommand());
}
});
panel.add(up);
cntButton++;
//Erstellt denn Button für den NavigationsButton. Action: left
int posL = intTop+(intHeight/2-10);
JButton lft = new JButton("");
lft.setBounds(intLeft+5, posL+intSpace, 20, 20);
lft.setContentAreaFilled(false);
lft.setActionCommand(""+cntButton);
lft.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new command.Exec(e.getActionCommand());
}
});
panel.add(lft);
cntButton++;
//Erstellt denn Button für den NavigationsButton. Action: right
int posR = intTop+(intHeight/2-10);
JButton rgt = new JButton("");
rgt.setBounds(intLeft+(intWidth-25), posR+intSpace, 20, 20);
rgt.setContentAreaFilled(false);
rgt.setActionCommand(""+cntButton);
rgt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new command.Exec(e.getActionCommand());
}
});
panel.add(rgt);
cntButton++;
//Erstellt denn Button für den NavigationsButton. Action: down
int posDown = intLeft+(intWidth/2-10);
JButton down = new JButton("");
down.setContentAreaFilled(false);
down.setBounds(posDown-1, intTop+intSpace+(intHeight-25), 20, 20);
down.setActionCommand(""+cntButton);
down.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new command.Exec(e.getActionCommand());
}
});
panel.add(down);
cntButton++;
}
}
}//end_while3
}//end_if
else {
/*
* Definition vom Background-Image
* |
* |
* v
*/
Element imgMain = root.getChild(strLevel1).getChild("Bitmap"); //Bezieht das Element Bitmap aus dem XML-File
String srcMain = imgMain.getAttributeValue("Filename"); //Bezieht das Attribut Filename aus dem Element "Bitmap"
URL urlMain = Screen.class.getResource("/"+srcMain.substring(2));//Setzt dir URL für das hintergrundbild
intMainLeft = Integer.parseInt(imgMain.getAttributeValue("left"));//X-Position
intMainTop = Integer.parseInt(imgMain.getAttributeValue("top"));//Y-Position
intMainWidth = Integer.parseInt(imgMain.getAttributeValue("width"));//Breite des Hintergrundbild
intMainHeight = Integer.parseInt(imgMain.getAttributeValue("height"));//Höhe des Hintergrundbild
Element imgDisplay = root.getChild(strLevel1).getChild("DisplayScreen");//Bezieht das Element DisplayScreen aus dem XML-File
disLeft = imgDisplay.getAttribute("left").getIntValue(); //Gibt die X-Koordinaten für das spätere Screenshotbild an
disTop = imgDisplay.getAttribute("top").getIntValue(); //Gibt die Y-Koordinaten für das spätere Screenshotbild an
bgImage = ImageIO.read(urlMain); //Lese Background BMP File in den ImageBuffer
Color colPink = new Color(255,0,255); //Neue Farbe wird definiert
this.imgFilter = new TransparentFilter(colPink); //Pink wir mit Transparenz ersetzt
ImageProducer bgPro = bgImage.getSource(); //Bild wird produziert
bgImage2 = createImage(new FilteredImageSource(bgPro, this.imgFilter));//Filter wird angewandt
mt.addImage(bgImage2 , 0);
resize(intMainWidth,intMainHeight+intSpace); //Appletgrösse ändern
setBackground(new Color(255,255,255)); //AppletHinterGrund auf Weiss setzen
}//end_else
}//end_while_2
}//end_while_1
try { mt.waitForAll(); } //Wartet bis alle Bilder in den Arbeitsspeicher geladen wurden
catch (InterruptedException e) { }
drawButtons(); //Ruft Methode drawButtons in der gleichen Klasse auf
panel.repaint();
}//end_try
//FEHLERAUSGABEN:
catch (IOException e) {
System.err.println(e);
}
catch (Exception e) {
System.err.println(e);
}
}
[/code]
Von dieser Zeile 117 soll er noch einmal beginnen -> zurückspringen...