Spring: Anfangsprobleme

Blackdragon57

Grünschnabel
Hallo erst mal,

Ich bin noch etwas frisch in Java und Spring und möchte dort gerne einiges lernen. Ich habe die Grundfunktion von Spring verstanden und auch schon Übungen gemacht bei denen in 2 verschiedenen Klassen Zahlen standen, in einer 3ten die Berechnung und dann per Dependency Injection ihre Werte erhalten haben und berechnet wurden. Nun möchte ich ein Fenster darstellen und einem Label einen Text per setText() zuweisen. Dies soll über Dependency Injection passieren, aber ich bekomme eine Fehlermeldung mit der ich nicht viel anfangen kann. Ich habe mich mittlerweile über java.security schlau gemacht und auch über Reflections. Kann mir jemand erklären was diese Fehlermeldung bedeuten, und wie ich sie beheben kann.

Hier die Fehlermeldung und weiter unten der Quellcode.

Danke im voraus.

Fehlermeldung:
Code:
init:
deps-jar:
compile-single:
run-single:
17.06.2008 13:09:08 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@6b7920: display name [org.springframework.context.support.FileSystemXmlApplicationContext@6b7920]; startup date [Tue Jun 17 13:09:08 CEST 2008]; root of context hierarchy
17.06.2008 13:09:08 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from file [/home/zerler/Spring GUI/src/springgui/beans.xml]
17.06.2008 13:09:08 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@6b7920]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1d0fafc
17.06.2008 13:09:08 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1d0fafc: defining beans [Gui]; root of factory hierarchy
Locking assertion failure.  Backtrace:
#0 /usr/lib32/libxcb-xlib.so.0 [0xf4bb0767]
#1 /usr/lib32/libxcb-xlib.so.0(xcb_xlib_unlock+0x31) [0xf4bb08b1]
#2 /usr/lib32/libX11.so.6(_XReply+0xfd) [0xbec861bd]
#3 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so [0xbed8a64e]
#4 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so [0xbed68f97]
#5 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so [0xbed69248]
#6 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so(Java_sun_awt_X11GraphicsEnvironment_initDisplay+0x2f) [0xbed6954f]
#7 [0xf4c88b7b]
#8 [0xf4c80f0d]
#9 [0xf4c80f0d]
#10 [0xf4c7e243]
#11 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so [0x62c5e1d]
#12 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so [0x6452248]
#13 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so [0x62c5cb0]
#14 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so(JVM_DoPrivileged+0x34b) [0x631bb6b]
#15 /opt/jdk1.6.0_02/jre/lib/i386/libjava.so(Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2+0x3d) [0xf7c9996d]
#16 [0xf4c88b7b]
#17 [0xf4c80da7]
#18 [0xf4c7e243]
#19 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so [0x62c5e1d]
Locking assertion failure.  Backtrace:
#0 /usr/lib32/libxcb-xlib.so.0 [0xf4bb0767]
#1 /usr/lib32/libxcb-xlib.so.0(xcb_xlib_lock+0x2e) [0xf4bb081e]
#2 /usr/lib32/libX11.so.6 [0xbec85518]
#3 /usr/lib32/libX11.so.6(XGetVisualInfo+0x26) [0xbec7c0a6]
#4 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so [0xbed68249]
#5 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so [0xbed68495]
#6 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so [0xbed692f9]
#7 /opt/jdk1.6.0_02/jre/lib/i386/xawt/libmawt.so(Java_sun_awt_X11GraphicsEnvironment_initDisplay+0x2f) [0xbed6954f]
#8 [0xf4c88b7b]
#9 [0xf4c80f0d]
#10 [0xf4c80f0d]
#11 [0xf4c7e243]
#12 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so [0x62c5e1d]
#13 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so [0x6452248]
#14 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so [0x62c5cb0]
#15 /opt/jdk1.6.0_02/jre/lib/i386/server/libjvm.so(JVM_DoPrivileged+0x34b) [0x631bb6b]
#16 /opt/jdk1.6.0_02/jre/lib/i386/libjava.so(Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2+0x3d) [0xf7c9996d]
#17 [0xf4c88b7b]
#18 [0xf4c80da7]
#19 [0xf4c7e243]
17.06.2008 13:09:08 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1d0fafc: defining beans [Gui]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Gui' defined in file [/home/zerler/Spring GUI/src/springgui/beans.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'spruch' of bean class [springgui.Gui]: No property 'spruch' found
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:478)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
        at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
        at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
        at springgui.Main.main(Main.java:14)
Caused by: org.springframework.beans.InvalidPropertyException: Invalid property 'spruch' of bean class [springgui.Gui]: No property 'spruch' found
        at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:382)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1287)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1248)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1008)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
        ... 14 more
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

Hier meine Klassen und die xml:

Main:
Code:
package springgui;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Main {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext("/src/springgui/beans.xml");
        Gui gui= (Gui) applicationContext.getBean("Gui");
        gui.setzeText(gui.spruch);
        
        Gui fenster = new Gui();
        fenster.setSize(100,100);
        fenster.setLocation(200,100);
        fenster.setVisible(true);
    }
}

Gui:
Code:
package springgui;

import java.awt.*;
import java.awt.event.*;

public class Gui extends Frame{
    
    public Label label;
    String spruch;
    
    public Gui()
    {
        Label label = new Label();
        add(label);  
        
        this.addWindowListener(new WindowAdapter() 
        {
            public void windowClosing( WindowEvent e )
            {
                System.exit(0);
            }
        });
    }

    void setzeText(String spruch)
    {
        label.setText(spruch);
    } 
}

beans.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <bean id="Gui" class="springgui.Gui">
    <property name="spruch"><value>"Hallo"</value></property>
    </bean>
</beans>
 
Hallo,

du brauchst auch die Getter- und Setter-Methoden zu dem String.

Ich verstehe aber auch deine main-Methode nicht. Warum legst du da nochmal ein neues Fenster an?

MFG

Sascha
 
Hi,

Ich war der Meinung ich brauche keine get Methode für den String. Werde das gleich mal ausprobieren. Das Fenster muss ja initialisiert werden. Und da das nicht in der Gui geschehen kann, weil man keine 2 Main Methoden haben kann, habe ich das in der Main mit reingeschrieben. Wenn ich das ganze ohne Spring teste, funktioniert es. Weißt du was die Fehlermeldungen bedeuten

Gruß Black
 
Hi nochmal,

habe die Getter Methode eingesetzt, bekomme jedoch immer noch den selben Fehler wie vorher. Also daran hat es scheinbar nicht gelegen. Freue mich auf weitere Vorschläge. Bin ziemlich hilflos...

Gruß Black
 
Ja, das Fenster muss initialisiert werden, aber das muss man nicht in der main-Methode machen. Es bringt dir aber nichts, wenn du dafür ein neues Fenster anlegst.
Du hast ein Fenster (gui), da ist der Text gesetzt. Dann legst du ein neues Fenster (fenster) an und setzt da die Größe, Position und machst es sichtbar. Das bringt nicht sehr viel. Du solltest das ganze bei gui machen.

Die Fehlermeldung sagt aus, dass das Property "spruch" in dieser Klasse nicht gefunden wurde. Das kann an den fehlenden Getter- und Setter-Methoden fehlen.

Ein Rat von mir ist, dass du dich erstmal mehr mit den Grundlagen von Java beschäftigst, bevor du dich mit Spring auseinander setzt.

MFG

Sascha
 
Du solltest meine Posts auch richtig lesen. Es fehlt auch die Methode setSpruch(String spruch).

MFG

Sascha
 
Muss diese Methode denn setSpruch() heißen? Sie ist schon vorhanden nur heißt sie setzeText().

Code:
void setzeText(String spruch)
    {
        label.setText(spruch);
    }

Innerhalb der Gui.

Funktioniert das denn wenn ich die Main ausführe, in der die Mainmethode ist und nebenher auch eine Mainmethode in der Gui. Ich benötige doch eine Main Methode um das Fenster sichtbar zu machen und zu initialisieren.

Gruß Black
 
Muss diese Methode denn setSpruch() heißen? Sie ist schon vorhanden nur heißt sie setzeText().
Getter- und Setter-Methoden sind dazu da, den Zugriff auf ein Object zu garantieren. Deine setText ist nicht die Setter-Methode für Spruch.

Das ganze sollte so aussehen:
Java:
public class GetterSetterExample{

   private String spruch = null;

   public String getSpruch(){
      return spruch;
   }

   public void setSpruch(String spruch){
      this.spruch = spruch;
   }

}

Getter- und Setter-Methoden zeichnen sich dadurch aus, dass sie genauso heißen wie die Variable, nur, dass noch get oder set davor steht und der erste Buchstabe des Names groß geschrieben wird.

Funktioniert das denn wenn ich die Main ausführe, in der die Mainmethode ist und nebenher auch eine Mainmethode in der Gui. Ich benötige doch eine Main Methode um das Fenster sichtbar zu machen und zu initialisieren.

Eine Main-Methode wird lediglich benötigt um das Programm auszuführen. Das Fenster würde ich im Konstruktor oder in einer initialize-Methode initialisieren.
Aber um mal bei deinem Code zu bleiben. So wäre es eher richtig. Wie gesagt, du hast bei dir zwei Fenster und es bringt nichts, wenn du bei einem Fenster den Text gesetzt hast und das andere Fenster sichbar machst.

Code:
 public static void main(String[] args) {
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext("/src/springgui/beans.xml");
        Gui gui= (Gui) applicationContext.getBean("Gui");
        gui.setzeText(gui.spruch);
        
        gui.setSize(100,100);
        gui.setLocation(200,100);
        gui.setVisible(true);
    }

Nimm dir auch meinen Rat zu herzen. Denn, wenn du die Grundlagen nicht beherschst, was meiner Meinung nach auch den Eindruck machst, wirst du mit Spring oder auch anderen Frameworks nur Probleme haben, weil du nicht weißt, was warum passiert oder was warum wie sein sollte.

MFG

Sascha
 
Hi,

Danke nochmal für die Hilfe. Hat mir sehr geholfen. Ich werde mir die Grundlagen noch weiter anschauen und einige Übungen machen.
Java ist nun mal nicht in einer Woche erlernt :rolleyes:

Ich verstehe jetzt auch wie du das mit den 2 Fenstern gemeint hast. Werde das nochmal gründlich überarbeiten.

Gruß Black
 
Zurück