java - Javadrone - Unable to get image from Parrot AR.Drone 2.0 -


i working on app control parrot ar.drone 2.0 using javadrone api , library.

i able connect drone , make take off/land successfully. there 2 java files : dronetestvideo.java, videopanel.java.

the dronetestvideo.java file responsible connecting drone , data, while videopanel.java file serves set images.

javadrone api can download here.

however, have no idea why i'failing live images drone. show me black screen words:

"no video connection"

here code:

dronetestvideo.java

package dronetest;  import com.codeminders.ardrone.ardrone; import com.codeminders.ardrone.ardrone.videochannel; import com.codeminders.ardrone.dronestatuschangelistener; import com.codeminders.ardrone.navdata; import com.codeminders.ardrone.navdatalistener; import java.io.ioexception; import java.net.unknownhostexception; import java.util.logging.level; import java.util.logging.logger;  public class dronetestvideo extends javax.swing.jframe implements dronestatuschangelistener, navdatalistener{      private static final long connect_timeout = 10000l;     private ardrone drone;     private final videopanel video = new videopanel();      public dronetestvideo() {         initcomponents();         initdrone();         videopanel.add(video);         takeoff();     }      private void initdrone() {         try{             drone = new ardrone();             drone.addstatuschangelistener(this);             drone.addstatuschangelistener(new dronestatuschangelistener() {                 public void ready() {                     org.apache.log4j.logger.getlogger(getclass().getname()).debug("updateloop::ready()");                 }             });             system.err.println("configure");             drone.selectvideochannel(ardrone.videochannel.horizontal_only);             drone.setcombinedyawmode(true);             drone.enableautomaticvideobitrate();             system.err.println("connecting drone");             drone.connect();             drone.waitforready(connect_timeout);             drone.clearemergencysignal();             system.err.println("connected drone");          } catch (ioexception ex) {             logger.getlogger(dronetestvideo.class.getname()).log(level.severe, null,ex);         }         drone.addnavdatalistener(this);         video.setdrone(drone);     }      private void takeoff()     {         try {             system.err.println("**********\ntrim\n**********");             drone.trim();             thread.sleep(2000);              system.err.println("**********\ntakeoff\n**********");             drone.takeoff();             thread.sleep(7000);              drone.land();         } catch (ioexception ex) {             logger.getlogger(dronetestvideo.class.getname()).log(level.severe, null, ex);         } catch (interruptedexception ex) {             logger.getlogger(dronetestvideo.class.getname()).log(level.severe, null, ex);         }     }      public static void main(string args[]) {         java.awt.eventqueue.invokelater(new runnable() {             public void run() {                 new dronetestvideo().setvisible(true);             }         });     } } 

videopanel.java

package dronetest;  import com.codeminders.ardrone.ardrone; import com.codeminders.ardrone.dronevideolistener; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.graphics2d; import java.awt.renderinghints; import java.awt.image.bufferedimage; import java.util.concurrent.atomic.atomicboolean; import java.util.concurrent.atomic.atomicreference;  public class videopanel extends javax.swing.jpanel implements dronevideolistener{      private atomicreference<bufferedimage> image = new atomicreference<bufferedimage>();     private atomicboolean preserveaspect = new atomicboolean(true);     private bufferedimage noconnection = new bufferedimage(320, 240, bufferedimage.type_int_rgb);      public videopanel() {         initcomponents();         graphics2d g2d = (graphics2d) noconnection.getgraphics();         font f = g2d.getfont().derivefont(24.0f);         g2d.setfont(f);         g2d.drawstring("no video connection", 40, 110);         image.set(noconnection);     }      public void setdrone(ardrone drone) {         drone.addimagelistener(this);         system.err.println("setdrone function here!");     }      public void setpreserveaspect(boolean preserve) {         preserveaspect.set(preserve);     }      public void framereceived(bufferedimage im) {         image.set(im);         repaint();     }      public void paintcomponent(graphics g) {         graphics2d g2d = (graphics2d) g;         g2d.setrenderinghint(renderinghints.key_text_antialiasing, renderinghints.value_text_antialias_on);         g2d.setrenderinghint(renderinghints.key_antialiasing, renderinghints.value_antialias_on);         int width = getwidth();         int height = getheight();         drawdroneimage(g2d, width, height);     }      private void drawdroneimage(graphics2d g2d, int width, int height) {         bufferedimage im = image.get();         if (im == null) {             return;         }         int xpos = 0;         int ypos = 0;         if (preserveaspect.get()) {             g2d.setcolor(color.black);             g2d.fill3drect(0, 0, width, height, false);             float widthunit = ((float) width / 4.0f);             float heightaspect = (float) height / widthunit;             float heightunit = ((float) height / 3.0f);             float widthaspect = (float) width / heightunit;              if (widthaspect > 4) {                 xpos = (int) (width - (heightunit * 4)) / 2;                 width = (int) (heightunit * 4);             } else if (heightaspect > 3) {                 ypos = (int) (height - (widthunit * 3)) / 2;                 height = (int) (widthunit * 3);             }         }         if (im != null) {             g2d.drawimage(im, xpos, ypos, width, height, null);         }     } } 

you not updating screen, no new calls drawdroneimage called videopanel.

you should set loop refresh jpanel (call repaint()).

and more, need implement doublebuffering strategies smoother image transaction.


Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -

Nuget pack csproj using nuspec -