Actions and events... (using code inside actionPerformed)

Suppose I have an application that needs to be as fast as possible and have a very responsive ui. It is a client that runs against a server on the network.
And suppose the client have a button, with an actionlistener and an actionperformed method.
Inside this actionperformed method the client needs to send something to the server, which is basically doing something like:
public void actionPerformed(ActionEvent e){
    doSomeWork();
    out.print(someText);
}Where out is a PrintStream opened to the server. Now the server responds and sends a message back to the client which receives it in a network thread that runs and polls for input. When a line of input is received it is then printed to a textarea in the client gui as something like this:
public class NetworkThread extends Thread{
public void run() {
     byte[] b = new byte[4096];
     int n = 0;
     while (n >= 0 && connected) {
          try {
               n = iStream.read(b);
               String input = doSomeParsing(b, n);
               if (input != null){
                    textArea.append(input);
}What i would liek to know, is if it is ok to do the send call inside the actionPerformed method of the button listener and if it is ok to simply append the text to the text area in the network thread?
Or should i use SwingUtilities.invokeLater or SwingWorker threads anywhere?
(I would want it to run as fast as possible in the gui side)

The code that interacts with the Server needs to be in a separate Thread so you don't block the GUI Event Thread.
In general, if you then need to update the GUI from the second Thread you would need to use the SwingUtilities.invokeLater(..).
However, if you read the API documentation for the JTextArea.append(...) method you will see the following:
This method is thread safe, although most Swing methods are not. Please see Threads and Swing for more information. so you shouldn't need to worry about the invokeLater().

Similar Messages

  • Struts Actions and events in one jsp?!

    Hello,
    I have a problem with Struts actions and events in a jsp.
    It is a search page and when the user clicks the search button I trigger an event and when the user clicks on a link in the result table (same page) I use an action that opens a new detail jsp. The first search query works well, I get a result, open the detail page, go back (using an action).
    Then I start a new search, but struts tries to open the detail page. While debugging I found out, that struts apparantly has no action or event. Why does it work at first time?
    Any ideas?
    Thanks in advance
    Britta

    Thanks for answer,
    I work with actions AND events. I think that`s the problem. When I go back from detail page to search page I use a custom DataForwardAction class with the following method:
    public void onCancel(DataActionContext ctx)
    DCBindingContainer bc = ctx.getBindingContainer();
    HttpServletRequest request = ctx.getHttpServletRequest();
    WebUtils.setSession(request);
    String ziel = request.getParameter("ziel");
    JUCtrlActionBinding action = (JUCtrlActionBinding) bc.findCtrlBinding("Rollback");
    action.doIt();
    try
    ctx.setActionForward(ziel);
    catch (Exception e)
    ctx.setActionForward("liste_freig");
    Ziel has the correct value ("search") and I think the struts config is also correct:
    <action path="/material" type="view.actions.materialAction" className="oracle.adf.controller.struts.actions.DataActionMapping" parameter="/material.jsp" name="DataForm">
    <set-property property="modelReference" value="generalUIModel"/>
    <forward name="liste_freig" path="/liste_freig.do"/>
    <forward name="liste_angelegt" path="/liste_angelegt.do"/>
    <forward name="list_bewertet" path="/list_bewertet.do"/>
    <forward name="liste_abgelehnt" path="/liste_abgelehnt.do"/>
    <forward name="liste_onhold" path="/liste_onhold.do"/>
    <forward name="search" path="/search.do?action=search"/>
    </action>
    But when I get back from material page to search page (the first time it works). The location pathname is material.do not search.do When start a new search the material page opens, not, as desired, the search page with new results.
    Search Action:
    public class searchAction extends DataForwardAction
    public searchAction()
    protected void prepareModel(DataActionContext ctx) throws Exception
    HttpServletRequest request = ctx.getHttpServletRequest();
    DataActionMapping acmap = ctx.getActionMapping();
    DCBindingContainer bc = ctx.getBindingContainer();
    WebUtils.setSession(request);
    JUCtrlActionBinding action = (JUCtrlActionBinding) bc.findCtrlBinding("delSearchQuery");
    action.doIt();
    String sEvent=null;
    try
    sEvent=request.getParameter("event");
    catch (Exception e)
    sEvent=null;
    if (sEvent==null)
    if (request.getParameter("action") != null)
    if (request.getParameter("action").equals("material"))
    Number mat_no=new Number(request.getParameter("MaterialNumber"));
    Number userId=new Number(WebUtils.getUserId(request));
    bc = ctx.getBindingContainer();
    action = (JUCtrlActionBinding) bc.findCtrlBinding("prepareMaterial");
    ArrayList arrayList= new ArrayList();
    arrayList.add(0,mat_no);
    arrayList.add(1,userId);
    action.setParams(arrayList);
    action.doIt();
    ctx.setActionForward("material");
    if (request.getParameter("action").equals("material_datasheet"))
    ctx.setActionForward("material_datasheet");
    super.prepareModel(ctx);
    public void onSearch(DataActionContext ctx)
    DCBindingContainer bc = ctx.getBindingContainer();
    HttpServletRequest request = ctx.getHttpServletRequest();
    WebUtils.setSession(request);
    ctx.setActionForward("search");
    Struts config:
    <action path="/search" className="oracle.adf.controller.struts.actions.DataActionMapping" type="view.actions.searchAction" name="DataForm" parameter="/search.jsp">
    <set-property property="modelReference" value="searchUIModel"/>
    <forward name="search" path="/search.do?action=search"/>
    <forward name="material" path="/material.do?action=material"/>
    <forward name="material_datasheet" path="/material_datasheet.do?action=material_datasheet"/>
    </action>
    I think it`s a Struts bug. Or is there something I don`t see?

  • Difference between action and event

    Hi
    while creating an action, we will find action & event handler.  What is the difference between Action and event.  If anyone provide with examples, it will be helpful for me.
    regards,
    vijaya.

    HI,
    In simple words we can put it as..IF you need any user interaction.. i.e. if your logic is based upon how user interact with your application then use Action..
    e.g. Buttons, dropdown UI elements...etc..
    Means actions are act between user and your application.
    But your application not only communicate with user.But also communicate with server too.
    so to communicate with server you need and Event
    Note. In Web Dynpro, events are called actions if they are sent from the client to the server.

  • Warning: Action and Event are not compatible for LinktoAction type

    Hi,
       I get a warning message "Action and event are not compatible" for the action associated with the type LinkToAction. The Action method "ShowDetails" has the parameters wdEvent (default) and IWDNodeElement.
       Can anybody please suggest what causes this warning?
    Regards
    Sagar

    Sagar,
    Unfortunately, it is impossible to remove this warning completely. However, you may safely ignore it.
    What you can do is copy text of warning (or part of text), then click "Filter" icon on Tasks view in IDE and set filter to hide these warnings. I do this for annoying "UI element has no lable text"
    Valery Silaev
    SaM Solutions
    http://www.sam-solutions.net

  • Movie Clips as buttons – ignoring my stop actions and event listeners

    Ok, so I think I am hear with the proper linked files to show you guys! Pretty much learning everything, so forgive my ignorance thus far!
    Anyway, I am just trying to figure out movie clips as buttons, and have been following along on Lynda.com – however, I seem to be doing these things right, but when i test my movie, the button just loops regardless of rollovers or stop actions.
    You can check this address www.midnyc.com to see the failed anim, and you should be able to import it as well. Here is my coding:
    function rollover (e:EVENT){
        myBtn.gotoAndPlay ("in");
    myBtn.addEventListener (MouseEvent.MOUSE_OVER, rollover);
    function rollout (e:EVENT){
        myBtn.gotoAndPlay ("out");
    myBtn.addEventListener (MouseEvent.MOUSE_OUT, rollout);
    thank you in advance for your help. And to KGLAD, thanks for recommending how to post a bit better! Since I never had links etc... sorry about that.

    Do you get any kind of error messages?  Normally if there's a coding error, movieclips and other things go haywire.
    For you event handler functions, try specifying the event that matches the listener event...
    function rollout (e:MouseEvent){
    I think "EVENT" would be wrong anyways... "Event" would be correct

  • Enable Auditing and events using SP powershell

    Hi,
    I have many document in site
    so my intention is  enable audit logging  using powershell(2013)
    Attempt 1:
    $siteurl = “http://web/sites/mydocsite/”
    $doclibname = "doc1"
    $site=new-object Microsoft.SharePoint.SPSite($siteurl)
    $web = $site.OpenWeb()
    $doclib = $web.Lists[$doclibname]
    $doclib.Audit.Auditflags = [Microsoft.SharePoint.SPAuditMaskType]::All;
    $doclib.Audit.Update();
    $doclib.Update();
    #To verify in UI
    Write-Host $doclib.Audit.AuditFlags
    after execute this command,i am not get any error..whether i check in
    UI  it is not enable
    My query is how to enable below required checkbos  using Sharepoint management shell in sp2013?
    Enable Auditing --->Enable check chkbox
    Specify the events to audit:
    opening or downloading documents, viewing items in lists, or viewing item properties--->Enable check box
    Editing items-->Enable check box
    Checking out or checking in items-->Enable check bos
    Moving or copying items to another location in the site--->Enable check box
    Deleting or restoring items--->Enable check box
    Please give solution as soon as possible

    check those links
    http://shipoint.com/2012/10/17/setting-sharepoint-2010-audit-log-settings-using-powershell/
    http://shokochino-sharepointexperience.blogspot.com/2013/05/create-auditing-reports-in-sharepoint.html
    https://social.technet.microsoft.com/Forums/sharepoint/en-US/88b4c0e5-bcce-4169-9e93-464d19320d73/sharepoint-2013-foundation-auditing?forum=sharepointgeneral
    Kind Regards, John Naguib Technical Consultant/Architect MCITP, MCPD, MCTS, MCT, TOGAF 9 Foundation

  • Call jsf h:commandLink action and actionListner in JavaScript

    Hi to all
    any one can help me..
    i want to call action and actionLIstner using javascript
    means....
    i want to set <h:commandLink action="" and actionListner="" in javascript
    but not at where <h:commandLink is defined.
    plz help me...
    thanx in Advance

    If I understand you try to do following?
    <h:selectOneMenu id="persontype"
                                     value="#{bean.personType}" 
                                     styleClass="select"
                                     disabled="#{bean.editMode}"
                                     onchange="changeMode(1)">
                      <f:selectItems value="#{bean.personTypeList}" />        
    <script type="text/javascript">        
          function changeMode(mode){ 
          var comboid;
          switch(mode){
          case 0:
          comboid = document.getElementById("register:persontype");
          break;
          case 1:
          comboid = document.getElementById("registerLegal:persontype");
          break;             
          case 2:
          comboid = document.getElementById("registerPhysical:persontype");
          break;             
          window.location.href ="/register/forms.jsf?personType="+comboid.value;                                
          </script>or like
    <h:commandButton type="submit" value="FILTER" onclick="set_filter();" styleClass="submit"/>
    function set_filter(){
              document.getElementById("formId:filter").value = "filter";
            }

  • Inbox, Calander, Schedule and Events

    Can anyone give a breif outline on How to use Calendar, Schedule and Events in Solaris Environment with Oracle 9iAS and how to develop application for calendar, schedule and events using JSP?

    I think much more detail is required - what calendar are you trying to use?

  • Useful Code of the Day:  Button fires events while held

    Have you ever been making a GUI application with Swing and used some JButtons? Fun, right? Have you ever wanted to have the button fire action events while the button was being held down? Well, if you just stick a plain JButton in your application and press and hold the mouse button on it, you'll see it doesn't do anything except sit there looking pressed in. Insolent button!
    RepeatButton (code below, couldn't think of a better name) is a JButton subclass which contains a timer that is set when the mouse button presses the button, and after a slight initial delay (configurable), fires action events to all registered action listeners repeatedly (with another configurable delay between events) until either the mouse is released or the mouse moves out of the button (it starts up again if the mouse moves back over without releasing the mouse button) or the button is disabled. The event modifiers are passed on as well, so you know if the shift or control buttons (or whatever) are being pressed at the same time.
    There is also a method to disable the repeated action firing while holding. This, in effect, turns the button into a normal JButton, if needed.
    There is a main method for testing which will show a button in a frame and print out the action command for each action event fired.
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.swing.*;
    import javax.swing.event.*;
    * <code>RepeatButton</code> is a <code>JButton</code> which contains a timer
    * for firing events while the button is held down.  There is a default
    * initial delay of 300ms before the first event is fired and a 60ms delay
    * between subsequent events.  When the user holds the button down and moves
    * the mouse out from over the button, the timer stops, but if the user moves
    * the mouse back over the button without having released the mouse button,
    * the timer starts up again at the same delay rate.  If the enabled state is
    * changed while the timer is active, it will be stopped.
    * NOTE:  The normal button behavior is that the action event is fired after
    * the button is released.  It may be important to konw then that this is
    * still the case.  So in effect, listeners will get 1 more event then what
    * the internal timer fires.  It's not a "bug", per se, just something to be
    * aware of.  There seems to be no way to suppress the final event from
    * firing anyway, except to process all ActionListeners internally.  But
    * realistically, it probably doesn't matter. 
    public class RepeatButton extends JButton
              implements ActionListener, MouseListener {
          * The pressed state for this button.
         private boolean pressed = false;
          * Flag to indicate that the button should fire events when held. 
          * If false, the button is effectively a plain old JButton, but
          * there may be times when this feature might wish to be disabled. 
         private boolean repeatEnabled = true;
          * The hold-down timer for this button.
         private Timer timer = null;
          * The pressed state for this button.
         private int delay = 60;
          * The pressed state for this button.
         private int initialDelay = 300;
          * Holder of the modifiers used when the mouse pressed the button. 
          * This is used for subsequently fired action events.  This may change
          * after mouse pressed if the user moves the mouse out, releases a key
          * and then moves the mouse back in. 
         private int modifiers = 0;
          * Creates a button with no set text or icon.
         public RepeatButton() {
              super();
              init();
          * Creates a button where properties are taken from the Action supplied.
          * @param  a  the button action
         public RepeatButton(Action a) {
              super(a);
              init();
          * Creates a button with an icon.
          * @param  icon  the button icon
         public RepeatButton(Icon icon) {
              super(icon);
              init();
          * Creates a button with text.
          * @param  text  the button text
         public RepeatButton(String text) {
              super(text);
              init();
          * Creates a button with initial text and an icon.
          * @param  text  the button text
          * @param  icon  the button icon
         public RepeatButton(String text, Icon icon) {
              super(text, icon);
              init();
          * Initializes the button.
         private void init() {
              this.addMouseListener(this);
              // initialize timers for button holding...
              this.timer = new Timer(this.delay, this);
              this.timer.setRepeats(true);
          * Gets the delay for the timer of this button. 
          * @return  the delay
         public int getDelay() {
              return this.delay;
          * Set the delay for the timer of this button. 
          * @param  d  the delay
         public void setDelay(int d) {
              this.delay = d;
          * Gets the initial delay for the timer of this button. 
          * @return  the initial delay
         public int getInitialDelay() {
              return this.initialDelay;
          * Sets the initial delay for the timer of this button. 
          * @param  d  the initial delay
         public void setInitialDelay(int d) {
              this.initialDelay = d;
          * Checks if the button should fire events when held.  If false, the
          * button is effectively a plain old JButton, but there may be times
          * when this feature might wish to be disabled. 
          * @return  if true, the button should fire events when held
         public boolean isRepeatEnabled() {
              return this.repeatEnabled;
          * Sets if the button should fire events when held.  If false, the
          * button is effectively a plain old JButton, but there may be times
          * when this feature might wish to be disabled.  If false, it will
          * also stop the timer if it's running.
          * @param  en  if true, the button should fire events when held
         public void setRepeatEnabled(boolean en) {
              if(!en) {
                   this.pressed = false;
                   if(timer.isRunning()) {
                        timer.stop();
              this.repeatEnabled = en;
          * Sets the enabled state of this button.  Overridden to stop the timer
          * if it's running.
          * @param  en  if true, enables the button
         public void setEnabled(boolean en) {
              if(en != super.isEnabled()) {
                   this.pressed = false;
                   if(timer.isRunning()) {
                        timer.stop();
              super.setEnabled(en);
          * Handle action events.
          * @param  ae  the action event
         public void actionPerformed(ActionEvent ae) {
              // process events only from this components
              if(ae.getSource() == this.timer) {
                   ActionEvent event = new ActionEvent(
                        this, ActionEvent.ACTION_PERFORMED,
                        super.getActionCommand(), this.modifiers);
                   super.fireActionPerformed(event);
              // testing code...
              else if(testing && ae.getSource() == this) {
                   System.out.println(ae.getActionCommand());
          * Handle mouse clicked events.
          * @param  me  the mouse event
         public void mouseClicked(MouseEvent me) {
              // process events only from this components
              if(me.getSource() == this) {
                   this.pressed = false;
                   if(this.timer.isRunning()) {
                        this.timer.stop();
          * Handle mouse pressed events.
          * @param  me  the mouse event
         public void mousePressed(MouseEvent me) {
              // process events only from this components
              if(me.getSource() == this && this.isEnabled() && this.isRepeatEnabled()) {
                   this.pressed = true;
                   if(!this.timer.isRunning()) {
                        this.modifiers = me.getModifiers();
                        this.timer.setInitialDelay(this.initialDelay);
                        this.timer.start();
          * Handle mouse released events.
          * @param  me  the mouse event
         public void mouseReleased(MouseEvent me) {
              // process events only from this components
              if(me.getSource() == this) {
                   this.pressed = false;
                   if(this.timer.isRunning()) {
                        this.timer.stop();
          * Handle mouse entered events.
          * @param  me  the mouse event
         public void mouseEntered(MouseEvent me) {
              // process events only from this components
              if(me.getSource() == this && this.isEnabled() && this.isRepeatEnabled()) {
                   if(this.pressed && !this.timer.isRunning()) {
                        this.modifiers = me.getModifiers();
                        this.timer.setInitialDelay(this.delay);
                        this.timer.start();
          * Handle mouse exited events.
          * @param  me  the mouse event
         public void mouseExited(MouseEvent me) {
              // process events only from this components
              if(me.getSource() == this) {
                   if(this.timer.isRunning()) {
                        this.timer.stop();
          * Testing flag.  Set in main method.
         private static boolean testing = false;
          * Main method, for testing.  Creates a frame with both styles of menu.
          * @param  args  the command-line arguments
         public static void main(String[] args) {
              testing = true;
              JFrame f = new JFrame("RepeatButton Test");
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              JPanel p = new JPanel();
              RepeatButton b = new RepeatButton("hold me");
              b.setActionCommand("test");
              b.addActionListener(b);
              p.add(b);
              f.getContentPane().add(p);
              f.pack();
              f.show();
    "Useful Code of the Day" is supplied by the person who posted this message. This code is not guaranteed by any warranty whatsoever. The code is free to use and modify as you see fit. The code was tested and worked for the author. If anyone else has some useful code, feel free to post it under this heading.

    This makes word completion possible for JTextArea:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    import java.util.*;
    * This class provides word completion for JTextArea.
    public class WordCompleteArea extends JTextArea {
        private boolean isTextComplete = true;
        public WordCompleteArea (Document doc, String text,
                                      int rows, int columns, KeyStroke expandKey) {
            super (doc, text, rows, columns);
            String s = "word-complete";
            Action wordComplete = new AbstractAction () {
                public void actionPerformed (ActionEvent e) {
                    wordComplete ();
            getInputMap ().put (expandKey, s);
            getActionMap ().put (s, wordComplete);
        public WordCompleteArea (Document doc, String text, int rows, int columns) {
            this (doc, text, rows, columns,
                            KeyStroke.getKeyStroke ("ctrl pressed SPACE"));
        public WordCompleteArea (Document doc) {
            this (doc, null, 0, 0);
        public WordCompleteArea (String text, int rows, int columns) {
            this (new PlainDocument (), text, rows, columns);
        public WordCompleteArea (int rows, int columns) {
            this (null, rows, columns);
        public WordCompleteArea (String text) {
            this (text, 0, 0);
        public WordCompleteArea () {
            this (0, 0);
         * Define if text already written in the JTextArea will be used
         * for expansion.
        public void setTextComplete (boolean b) {
            isTextComplete = b;
         * Find out if text already written in the JTextArea will be used
         * for expansion.
        public boolean isTextComplete () {
            return isTextComplete;
        private String tokenDelimiters = "\t\r\n ,;()[]{}%+/-*<>=&|!\"\'.@#";
         * Get delimiters that form a word.
        public String getTokenDelimiters () {
            return tokenDelimiters;
         * Set delimiters that form a word.
        public void setTokenDelimiters (String s) {
            tokenDelimiters = s;
        // Additional words used for expansion.
        private LinkedList wordCompleteList = new LinkedList ();
         * Add words that will be used as expansion.
        public void addCompleteWords (java.util.List words) {
            wordCompleteList.add (words);
         * Add a word that will be used as expansion.
        public void addCompleteWord (String word) {
            wordCompleteList.add (word);
        private String lastExpanded = null;
        private String lastExpansion = null;
        private Set dontAccept = new HashSet ();
        protected void wordComplete () {
            int caret = getCaretPosition ();
            if (caret == 0)
                return;
            String text = getText ();
            if (caret != text.length () && isCompletionLetter (text.charAt (caret)))
                return;
            StringBuffer sb = new StringBuffer ();
            int index = caret - 1;
            char ch;
            while (index >= 0 && isCompletionLetter ((ch = text.charAt (index)))) {
                sb.append (ch);
                index--;
            if (sb.length () == 0)
                return;
            sb.reverse ();
            String word = sb.toString ();
            String toExpand = word;
            if (toExpand.equals (lastExpansion)) {
                dontAccept.add (lastExpansion);
                toExpand = lastExpanded;
            } else {
                dontAccept.clear ();
            String s = findExpansion (toExpand, caret);
            if (s != null) {
                lastExpanded = toExpand;
                lastExpansion = s;
                replaceRange (s, caret - word.length (), caret);
            } else {
                dontAccept.clear ();
                lastExpanded = null;
                lastExpansion = null;
                int diff = word.length () - toExpand.length ();
                replaceRange ("", caret - diff, caret);
        private boolean isCompletionLetter (char ch) {
            return tokenDelimiters.indexOf (ch) < 0;
        protected String findExpansion (String word, int caret) {
            StringTokenizer st;
            if (isTextComplete) {
                st = new StringTokenizer (getText (), getTokenDelimiters ());
                while (st.hasMoreTokens ()) {
                    String s = st.nextToken ();
                    if (    s.startsWith (word)
                            && s.length () != word.length ()
                            && !dontAccept.contains (s)      ) {
                        return s;
            for (Iterator it = wordCompleteList.iterator (); it.hasNext (); ) {
                st = new StringTokenizer
                                ((String) it.next (), getTokenDelimiters ());
                while (st.hasMoreTokens ()) {
                    String s = st.nextToken ();
                    if (    s.startsWith (word)
                            && s.length () != word.length ()
                            && !dontAccept.contains (s)      ) {
                        return s;
            return null;
        // TEST
        public static void main (String[] args) {
            WordCompleteArea a = new WordCompleteArea ();
            JFrame window = new JFrame ();
            window.getContentPane ().add (a, BorderLayout.CENTER);
            window.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            window.setSize (300, 300);
            window.setVisible (true);
    }

  • Read barcode or QR code inside image and save it in the file as metadata

    Maybe someone can help me with this question...
    All product photos contain a barcode or QR-code. It is visible inside the image.
    The customer is looking for a way (a plug-in) that is able to find the code inside the image, read it and place the information found in a preselected Metadata field of the image it self.
    Can anyone tell me if this already exists or is there anyone who can develop it? If yes, than please let me know
    Regards,
    Pieter

    It would be absolutely incredibly useful to me as a volume photographer, and I suspect other photographers too.  Anybody who needs to link data to images or catalogue images would be the target market.
    Let me outline a conversation that I had with a Lightroom developer at TTG recently, who unfortunately can't help me...
    Original Conversation is at:  Lightroom 6 (Page 1) — General — Community @ The Turning Gate (post 17 onwards).
    Automatically matching and syncing data to pictures is a huge software industry in its own right, believe me.
    As a school photographer (though not solely), matching student IDs to their pictures makes everything so much easier and is vital to update student record databases with images of pupils.  But it's also very relevant to other sectors such as events and sports photographers.  Imagine if this data could be incorporated into TTG database search facility.... (Do we have a swoon smiley?)
    Several pieces of commercial software is available, but most rely on the camera being permanently tethered to a laptop and using a barcode scanner to renames files as they come in.  This is a crap, restrictive system but is the one the vast majority of people use.  An example of this is the Australian Timestone software (http://timestonesoftware.com) which is very popular, but runs into the thousands of UK Pounds for a licence.
    An American photographer called Mike Fulton wrote a piece of software called fotovelocity.net which does exactly what I prefer - to photograph the pupil with a barcode somewhere in the image that later gets read by the software and data appended to the metadata of the image.  This is slightly cheaper than Timestone, but still runs into the thousands and he not interested in dealing with anybody outside the US.  
    If Lightroom can read and guess faces to add naming data, then it must surely be an easy upgrade to read an easily scannable QR code?
    and ...
    Has to be relevant to more than just me, surely?
    Imagine all the events / dance meets / clubs / nurseries / schools / football photographers that would use this.  Admittedly, this is all volume 'hot-dog' photography and not the artistic side, but it puts a fairly nice roof over my head.
    With schools I get a database beforehand, but for most events you don't need to know anything about the attendees to the event beforehand, as you just print out labels that have qr codes with sequenced numbers on them which the portrait subject (or their parents) then keep.  They then either visit a printing booth and type the code or take it home and type the code into their browsers and #kabam# up comes their images for purchase.  How they run it so that only the first image has the barcode visible yet all subsequent images retain the data from the first image until another barcode is detected I don't know.  I guess it must be that a numeric sequence must also be appended to the data from the barcode.
    It's a wonderful system for photographers, which is why it costs megabucks.
    I will admit though, that the commercial software tends to lab integrate as well, so there is more than just barcode reading.  Unfortunately, this ties you in to the system that your preferred lab uses, usually Timestone in the UK, and hence why people have to pay those silly license prices.
    If you need a sample image with a QR code in just let me know.
    Maybe fotoveolcity instructional videos may give you an impression of how this type of software flows and performs.
    General Volume Workflow ‹ Foto Velocity

  • Add application and document level events using javascript

    Hi All,
    I need to do some validation in the preprint event of the pdf document. There are samples available using the UI and adding the script in the script dialog, but my requirement is that i need to map the 'preprint' event and event handler to the pdf document using pure javascript code without the UI. Any help would be greatly helpful. Thanks in advance.
    Regards,
    Charan

    You can write a document-level function into the actions handlers using the doc.setAction() method from a folder-level script, but one folder-level script cannot create another.
    Suppose you have a folder-level function triggered by a menu item, and it has collected a reference to the active document as oDoc:
    var myScript = 'console.println("I am about to be printed and I have " + this.numPages + " pages" );';
    oDoc.setAction("WillPrint",myScript);

  • Can we create a dynamic action for Training and Event Management???

    Hi All
    i need to configure automatic email generation for an employee when he gets booked for a training program in the training and event management module. can we use a dynamic action for it? and how to configure it?? I also guess that i have to use the Feature MAILS for it. but i am not sure abt it and also not sure how to configure it. I will really appreciate if someone can provide me with a step to step configuration for the same. Its urgently sought.
    Thanks and Regards

    Notifications in T&E are done through Workflow.Dynamic Actions are only for PA Infotypes.
    ~Suresh

  • How to use Event Tracking Code for Google Analytics in Dreamweaver CS5

    I need to track clicks on links that go to an outside website. I've read about "event tracking code". I'm not sure if it's the right tool to use. And if it is, I've spent several hours reading about it and I can't figure out how to use it. It looks like you need to be an expert developer to be able to make sense of all this. I've always been helped when I ask a question here, I'm hoping that someone can help me.
    What my client needs is to know what links are being clicked, and how often. Here's the page where I want to do this: Available Homes - Arizona Vacation Home Rentals 
    I added a code that I created using the tool I found here: General Event Tracking Code for Google Analytics but can't see to be able to make this work. I added this code to the first link called "View it Here" for the top, left house. Here's the code: <a href="http://www.homeaway.com/vacation-rental/p3495538" onClick="ga('send', 'event', { eventCategory: 'clicks', eventAction: 'clicks on homes', eventLabel: 'Clicked'});" target="_blank">View it HERE!</a> 
    Then I set a Goal in Google Analytics like it said in the instructions but it doesn't seem to work... I would APPRECIATE ANY HELP!
    Thanks,
    Brigitte

    I think you misunderstood what Event Tracking is designed for.  This is from Google Help
    Tracking Code: Event Tracking - Google Analytics — Google Developers
    "Use this to track visitor behavior on your website that is NOT related to a web page visit, such as interaction with a Flash video movie control or any user event that does not trigger a page request."
    Clicks on links are page requests.  I think for your purposes, you may want the Cross Domain Link Tracking plugin.
    Cross Domain Tracking - Web Tracking (analytics.js) - Google Analytics — Google Developers
    Nancy O.

  • How to:  using the Place command in an action and remember the correct source filename...

    I have a large set of product, architecture, and other subject-specific photos, that I’m preparing for a new website; all to be placed in various galleries.
    For each photo, I want it to have the same background.  If I were doing this manually, I would simply “place” the subject photo into the background, and save it – back to the original photo name.
    In other words, doing this manually, PRODUCT_001.TIF gets placed into STANDARD_BKGRND.TIF, (thereby automatically correctly sizing and centering it), and then saving the result back to PRODUCT_001.TIF; either overwriting the original, or into a new folder.   (I have the original file somewhere else, and am working with an intermediate copy).
    But since I have several hundred photos, how do I create an action (and really – a droplet) that will save the resulting file to the desired name?  Typically placing photo ‘PRODUCT_001’ into photo ‘B’, alters photo ‘STANDARD_BKGRND’, so I can’t save the result back to ‘PRODUCT_001’.  Said differently, in a droplet, each time it's run saves the result back to the same filename 'STANDARD_BKGRND'.
    The end result – I want to apply that droplet to all the PRODUCT_***.TIF files in a given folder, and end up with the same file names as before.
    Thanks in advance for your help!
    Jerry
    PS - I have no scripting experience in PS, but have written code in other applications/scenarios.

    Its great that your products are cutouts layers,  Its easy to put cutouts on backgrounds and even add layer style to the product layer to enhance the composite. Still cutouts have size and resolution as  do your background images. 
    When you make composites. A document that is place in or pasted into the current document will be resample to match the current documents DPI resolution to preserve the size of the document being place or pasted in size.
    Additionally if your using place if the document being placed in does not fit within the current document's canvas size. Photoshop may scale the image to fit within the canvas.  It depends on your user id Photoshop Preference setting.
    That means you need you handle the sizes involved.
    I would think that you would want the final composite to be the size of the background image.
    You need to know its size and dpi resolution.  You must use image size on your product image and make the image have the same dpi resolution and a size smaller then the background image.  Perhas they have the same dip resolution as the background and are smaller in size. If that the cast their size are good no image resize  is required,
    Then you need to use canvas size to make the document have the same size and resolution as the background image.
    You may want to center the product layer over the canvas however Canvas size will add canvas evenly around the produt layer's layer bounds when you leave the anchor point in the center. 
    When you then place in the background image it will not be resampled for it has the same dpi resolution as the current document and it will not be scaled for it is an exact canvas size fit.  All that remains to be done is  move the current placed layer below the  product layer 
    The document name is the product image file name opened by you or by Photoshop automate batch process.

  • How to:  using the Place command in an action and remembering the source filename...

    I have a large set of product, architecture, and other subject-specific photos, that I’m preparing for a new website; all to be placed in various galleries.
    For each photo, I want it to have the same background.  If I were doing this manually, I would simply “place” the subject photo into the background, and save it – back to the original photo name.
    In other words, doing this manually, PRODUCT_001.TIF gets placed into STANDARD_BKGRND.TIF, (thereby automatically correctly sizing and centering it), and then saving the result back to PRODUCT_001.TIF; either overwriting the original, or into a new folder.   (I have the original file somewhere else, and am working with an intermediate copy).
    But since I have several hundred photos, how do I create an action (and really – a droplet) that will save the resulting file to the desired name?  Typically placing photo ‘PRODUCT_001’ into photo ‘B’, alters photo ‘STANDARD_BKGRND’, so I can’t save the result back to ‘PRODUCT_001’.  Said differently, in a droplet, each time it's run saves the result back to the same filename 'STANDARD_BKGRND'.
    The end result – I want to apply that droplet to all the PRODUCT_***.TIF files in a given folder, and end up with the same file names as before.
    Thanks in advance for your help!
    Jerry
    PS - I have no scripting experience in PS, but have written code in other applications/scenarios. 

    Actions don't have access to the document name (where the file name is).  Scripts do, however.
    If your products are sequentially numbered, you're in luck.  You can overide the "Save as command" and make sure that your naming uses a sequence which you can set to the same starting number as your product. Here is an example of how to configure File -> Automate -> Batch (assume the set and action are your hand built one)
    Instead of "Document name" you'd type "PRODUCT_" per your example and choose a 3 digit Serial number.
    The "Starting Serial #" is where you can change if your products are numbered say, 101 and up.

Maybe you are looking for

  • Access Servie 2013 Error

    In my farm Access Service 2013 is not working. Error I am seeing in logs are ServerSession.ProcessServerSessionException: An exception during ExecuteWebMethod has occurred for server: http://servername:32843/88ffa77a9eab419a8965eefd83e816b2/AccessSer

  • How do I clear recent items from Preview in Lion?

       I hate this new version of Preview, the screensaver won't loop, you can't clear the recent images... It is piece of crap software! Go back to Snow Leopard version please!!!

  • Unhiding menues using AMIBCP (changes not saved)

    Hi all I'm trying to unhide som menues in a HP OEM bios for an MSI OEM board using AMIBCP, but changes I make are not seen when I flash the updated rom-file. Actually, the strange thing is that all sub-menues are allready enabled when I open up the r

  • Blackberry bold 9900

    I recently downloaded an app (gps for google) and  after the trial period I deleted it but I get notifications to renew (upgrade for pay) I do not want it, how I stop it from receiving the notices?

  • WSDL to JAVA conversion problem

    Hi, I am facing a problem while building the Java stubs, skeletons and data files from my WSDL file using the WSDL2Java utility of Axis. It is not generating the expected number of classes. Am I having a problem 'coz my wsdl contains two namespaces ?