# webcam applet mit swing



## Guest (21. Nov 2006)

hallo!
ich versuche verzweifelt, meinem applet:


```
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.applet.Applet;
import java.io.*;
import java.net.*;

public class camAction extends JApplet {
    
// DEKLARIEREN der CONTROLS
    
    JButton jB1 = new JButton();
    JButton jB2 = new JButton();
    JButton jB3 = new JButton();
    JButton jB4 = new JButton();
    JLabel  jL1 = new JLabel();
    
    TextArea jTF1 = new TextArea("Text",8,8,1);
    String str = new String("");
    public Image image;
    public ImageObserver imgO1;
    
    
    public void init() {
        //JFrame f = new JFrame();
        //setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
//    f.applyComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT );
        setLayout( new BorderLayout(5, 5) );
        getRootPane().putClientProperty(
                "defeatSystemEventQueueCheck", Boolean.TRUE);
        
// INIT_CONTROLS
// Eventuelles Layout zurücksetzen
        
        getContentPane().setLayout(null);
        
// Hintergrundfarbe setzen
        
        getContentPane().setBackground(java.awt.Color.lightGray);
        
// Größe Applet
        
        setSize(450,350);
        
// Belegen der CONTROLS mit Werten
// danach hinzufügen.
// Als dritten Schritt legen wir in dem
// Beispiel die exakte Position und Größe
// des Controls fest
       Image image;
        try {
            // Create a URL for the image's location
            URL url = new URL("http://localhost/cam/");
            
            // Get the image
            image = java.awt.Toolkit.getDefaultToolkit().getDefaultToolkit().createImage(url);
        } catch (MalformedURLException e) {image = null;
        }
        
        
        jB1.setText("Links");
        jB1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB1);
        jB1.setBounds(60,220,140,50);
        
        jB2.setText("Rechts");
        jB2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB2);
        jB2.setBounds(228,220,140,50);
        
        jB3.setText("Hoch");
        jB3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB3);
        jB3.setBounds(60,168,140,50);
        
        jB4.setText("Runter");
        jB4.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB4);
        jB4.setBounds(228,168,140,50);
        
        getContentPane().add(jTF1);
        jTF1.setBounds(60,24,324,38);
        
        
        jL1.prepareImage(image,230,230,imgO1);
        jL1.draw????????????????????????????????????
        getContentPane().add(jL1);
        

        
// REGISTIEREN und EINRICHTEN der LISTENER
// Erster Schritt: Erzeugen eines Objekts der
// Klasse, wo die Auswertung der Events erfolgt.
        
        jRB meineMaus = new jRB();
        
// Registrieren der Listener
// - hier nur Mauslistener
        
        jB1.addMouseListener(meineMaus);
        jB2.addMouseListener(meineMaus);
        jB3.addMouseListener(meineMaus);
        jB4.addMouseListener(meineMaus);
        
        //xportwebcam
        
        
    }
    
// Klasse zum Auswerten der Reaktionen
    
    class jRB extends java.awt.event.MouseAdapter {
        
// Die Methode ruft je nach angeklicktem Control
// die entsprechende Methode zum Behandeln auf.
        
        public void mouseClicked(java.awt.event.MouseEvent event){
            
            Object object = event.getSource();
            
            if (object == jB1)
                jB1_mouseClicked(event);
            
            else if (object == jB2)
                jB2_mouseClicked(event);
            
            else if (object == jB3)
                jB3_mouseClicked(event);
            
            else if (object == jB4)
                jB4_mouseClicked(event);
            
        }
        
    }
    
    void jB1_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Links";
        jTF1.append("\n" +"<user> " +  str);
    }
    
    void jB2_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Rechts";
        jTF1.append("\n" +"<user> " +  str);
    }
    
    void jB3_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Hoch";
        jTF1.append("\n" +"<user> " +  str);
    }
    
    void jB4_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Runter";
        jTF1.append("\n" +"<user> " +  str);
    }
    
}
```

das bild von http://localhost/cam/ beizubringen (es soll in jL1 angezeigt werden, falls das möglich ist. leider will mir dasnicht gelingen.. ich hab bis jetzt noch nie mit swing gearbeitet.)
für einen kleinen lösungsansatz wäre ich sehr dankbar!

mfg

andreas


----------



## anti43 (21. Nov 2006)

ich wars!  :shock:


----------



## Wildcard (21. Nov 2006)

Davon abgesehen das du mit unsignierten Applets weder URL Connections aufbauen kannst, noch Zugriff auf die lokale Festplatte hast:
http://localhost/cam/
Ist ein Folder. Und auch wenn darauf ein Apache antwortet der versucht auf eine index.html umzuleiten, das Toolkit ist kein Browser...
Applets haben eine eigene getImage(URL) Methode, allerdings muss dein Applet die nötigen Rechte haben, und du solltest die *echte* URL angeben, denn ich glaube nicht dass das funktionieren wird.


----------



## Guest (21. Nov 2006)

achso, nein, der apache ist so konfiguriert, das das geht. das anzeigen des bildes hab ich schon erfolgreich so gelöst, allerdings dann mit 

paint(Graphics g){
g.drawimage(blabla)
}

also, daran solls nicht hängen. habs testweise auch schon mit richtiger url versucht. es geht ja so, nur ich bekomm das bild "image" nicht in diesen  contentpane rein!
also: mein problem liegt im anzeigen von bildern unter swing , nicht im laden von bildern... 
 :roll:


----------



## anti43 (21. Nov 2006)

und getImage() hab ich auch schon versucht, was mein problem nicht ändert, nämlich das image auszugeben


----------



## Wildcard (21. Nov 2006)

Hast du das überprüft? (File Objekt mit der URL erstellen und die size ausgeben lassen).
Sofern das Bild nämlich geladen ist kannst du es auch mir drawImage zeichnen.


----------



## anti43 (21. Nov 2006)

ja aber wie sag ichs ihm wohin es gealden werden soll.das ist doch nicht beliebeig wie bei drawimage, das soll doch sichtbar auf den obersten pane (so denk ich es mir , ICH WEISS ES EINFACH NICHT)
bitte bitte  ein code schnipsel, irgendwas, damit ich das wie begreifen kann.

  jL1.prepareImage(image,230,230,imgO1);
        jL1.draw????????????????????????????????????
        getContentPane().add(jL1); 

irgendwie so?? diese tutorials von sun sind leider nicht soo hilfreich!


----------



## Wildcard (21. Nov 2006)

Am leichtesten machst du's dir so:

```
JLabel label = new JLabel(new ImageIcon(File/URL));
someContainer.add(label):
```


----------



## anti43 (21. Nov 2006)

ok, soweit so gut, habs eingebaut:


```
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.applet.Applet;
import java.io.*;
import java.net.*;

public class camAction extends JApplet {
   
// DEKLARIEREN der CONTROLS

   String strg = new String("http://virtual.finland.fi/finfo/images/season/webcam7.jpg");
    JButton jB1 = new JButton();
    JButton jB2 = new JButton();
    JButton jB3 = new JButton();
    JButton jB4 = new JButton();
    JLabel  jL1 = new JLabel(new ImageIcon(strg));
   
    TextArea jTF1 = new TextArea("Text",8,8,1);
    String str = new String("");
    public Image image;
    public ImageObserver imgO1;
   
   
    public void init() {

        setLayout( new BorderLayout(5, 5) );
        getRootPane().putClientProperty(
                "defeatSystemEventQueueCheck", Boolean.TRUE);
       
// INIT_CONTROLS
// Eventuelles Layout zurücksetzen
       
        getContentPane().setLayout(null);
       
// Hintergrundfarbe setzen
       
        getContentPane().setBackground(java.awt.Color.lightGray);
       
// Größe Applet
       
        setSize(450,350);
       
// Belegen der CONTROLS mit Werten
// danach hinzufügen.
// Als dritten Schritt legen wir in dem
// Beispiel die exakte Position und Größe
// des Controls fest
       
       
        jB1.setText("Links");
        jB1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB1);
        jB1.setBounds(60,220,140,50);
       
        jB2.setText("Rechts");
        jB2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB2);
        jB2.setBounds(228,220,140,50);
       
        jB3.setText("Hoch");
        jB3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB3);
        jB3.setBounds(60,168,140,50);
       
        jB4.setText("Runter");
        jB4.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        getContentPane().add(jB4);
        jB4.setBounds(228,168,140,50);
       
       // getContentPane().add(jTF1);
       // jTF1.setBounds(60,24,324,38);
       
        getContentPane().add(jL1);
        //jL1.setBounds(60,24,324,38);

       
// REGISTIEREN und EINRICHTEN der LISTENER
// Erster Schritt: Erzeugen eines Objekts der
// Klasse, wo die Auswertung der Events erfolgt.
       
        jRB meineMaus = new jRB();
       
// Registrieren der Listener
// - hier nur Mauslistener
       
        jB1.addMouseListener(meineMaus);
        jB2.addMouseListener(meineMaus);
        jB3.addMouseListener(meineMaus);
        jB4.addMouseListener(meineMaus);
       
        //xportwebcam
       
       
    }
   
// Klasse zum Auswerten der Reaktionen
   
    class jRB extends java.awt.event.MouseAdapter {
       
// Die Methode ruft je nach angeklicktem Control
// die entsprechende Methode zum Behandeln auf.
       
        public void mouseClicked(java.awt.event.MouseEvent event){
           
            Object object = event.getSource();
           
            if (object == jB1)
                jB1_mouseClicked(event);
           
            else if (object == jB2)
                jB2_mouseClicked(event);
           
            else if (object == jB3)
                jB3_mouseClicked(event);
           
            else if (object == jB4)
                jB4_mouseClicked(event);
           
        }
       
    }
   
    void jB1_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Links";
        jTF1.append("\n" +"<user> " +  str);
    }
   
    void jB2_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Rechts";
        jTF1.append("\n" +"<user> " +  str);
    }
   
    void jB3_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Hoch";
        jTF1.append("\n" +"<user> " +  str);
    }
   
    void jB4_mouseClicked(java.awt.event.MouseEvent event) {
        str = "Runter";
        jTF1.append("\n" +"<user> " +  str);
    }
   
}
```

leider geschieht nichts, hab auch mal die imageurl geändert, möglichweise läd er das bild ja wirklich nicht.-. 
und hab mich mal über imageIcon schlau gemacht, also es sollte ja so funktionieren.
tut es aber leider nicht :-(


----------



## Wildcard (21. Nov 2006)

Da du keinen Layout Manager benutzt musst du dem Label manuell eine Größe zuweisen.
Und ich sag's dir nochmal: überprüf zuerst mal ob er das Image *wirklich* lädt.


----------



## anti43 (22. Nov 2006)

also das mit dem label klappt jetzt, vielen dank!  :applaus: 
von localhost/cam/ läd er es (und zeigt es auch an 
, aber nur mit getImage, ImageIcon(url) alleine macht nichts), 
von extern leider nicht: (ich ändere nur die url, sonst nichts!)   :bahnhof: 


```
try{
        	
        	if (webcam!=null) webcam.flush();
        
                webcam =  getToolkit().getImage(new URL("http://my.saudi.net.sa/webcam/"));

            
            
            
            JLabel  jL1 = new JLabel(new ImageIcon(webcam));
            jL1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
            jL1.setSize(240, 180);
            getContentPane().add(jL1);
            
        } catch(MalformedURLException e){
            ;
        }
```


----------



## anti43 (22. Nov 2006)

es lag am proxy server, geht jetzt !! vielen dank!


----------

