Need your help, How to write a program such as drag the objects to the front panel like using the LabVIEW Front Platte
Dear all:
Sorry for so long title.
I need your help with how to drag the objects and drop onto the front panel.
Like the LabVIEW front platte, i can choose the objects i can drop onto every where of the front panel.
Could drag and drop function can satify?
Any idea?
Thank you
Attachments:
Image00000.jpg 75 KB
What you want to do is relatively complicated and it seems that your knowledge of LabVIEW is relatively basic. I suggest you try searching this site and google for LabVIEW tutorials. Here, here, here, here, here and here are a few you can start with and here are some tutorial videos. You can also contact your local NI office and join one of their courses.
In addition, I suggest you read the LabVIEW style guide and the LabVIEW user manual (Help>>Search the LabVIEW Bookshelf).
Try to take over the world!
Similar Messages
-
I am using Labview to comunicate with ADAM modules, but I want to comunicate with them using Modbus protocol. I don´t want to use "ADAM protocol" ASCII comands that the modules can understand.
So I need a Modbus driver or Modbus libraries. The PROBLEM is that I am using LINUX!!!!!!!!!!!!!!!!
I am looking forward to your answer!!
GraciBichillo wrote:
> hi!!!I need your help!! Does anyone know if there is any Modbus lib or
> Modbus driver to use this en Labview BUT in LINUX?
>
> I am using Labview to comunicate with ADAM modules, but I want to
> comunicate with them using Modbus protocol. I don´t want to use "ADAM
> protocol" ASCII comands that the modules can understand.
> So I need a Modbus driver or Modbus libraries. The PROBLEM is that I
> am using LINUX!!!!!!!!!!!!!!!!
Please don't shout. It's deafening my ears!
Rolf Kalbermatter
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
I Need Your Help With My IPod Touch 4 I Would Like To Have Music To Listen To&I Would Like To Know How To Get Internet For My Apple IPod Touch 4 So I Can Have Music To Listen To.Thank You,Donna Spinner
Connect to your home wi-fi network.
Click Support at the top of this page, then click Manuals.
Select the ipod touch manual. -
I need your help how to create service plan using programm
Hello everybody
I met some difficulities when writing a programm which is used to create service plan.
I used the function module 'crm_order_maintain'.
Can you tell me how to set the parameters:
IT_SERVICEPLAN_I
IT_SERVICEPLAN_IE
The two parameters is used as cycle data.
I'm waiting for your help.
If you have any idea,please apply to my message .Thank you very much. ^ ^Hi,
I think there is standard way of creating service plans using actions..
The standard method used is CREATE_ORDER_SRVPLAN.
Regards,
PePe -
Hi guys! Need you help with iCloud Notes on Mac Pro 10.7.5. I've found this apllication more useful comparing with "stickers", however can't pin it to desktop or dock. Thanks a lot in advance!
Hi guys! Need you help with iCloud Notes on Mac Pro 10.7.5. I've found this apllication more useful comparing with "stickers", however can't pin it to desktop or dock. Thanks a lot in advance!
-
Need Your help how to: "Install APEX"
Can you help me and show me by details how can I install the oracle application express in my PC ?
Thank you very much.Can someone help me as i'm trying to upgrade into apex 3.0.1
The standard install went OK but the next step failed, which is to run this:
@apex_home/apex/apxldimg.sql APEX_HOME
ERROR at line 1:
ORA-22280: file or LOB operation FILEOPEN failed
The system cannot find the path specified.
ORA-06512: at "SYS.DBMS_LOB", line 523
ORA-06512: at "SYS.XMLTYPE", line 287
ORA-06512: at line 15
is there a way to fix this??? when i run apex, it doesn't load properly. images for objects are missing and its not loading any page definition.
please help. thanks. -
Badly need your help: How to fix my iphone 3gs restoration problem
it's been for a month now that i could not use my iphone 3gs. i encountered some problem which i have difficulty to fix or resolve the problem: Currently my iphone 3gs is in recovery mode (which it seems got stucked). When I plug my iphone to restore it via itunes the message appeared as follows: The iPhone"iPhone" could not be restored. An unknown error occurred (1). I already tried to search the web but could not find any suggestion how to fix it. If there's anymore that encountered the same problem, I highly appreciate if you could assist me step by step. By the way, i bought my iphone 3gs "open or unlocked", so I don't jailbrake. thanks.
You could try to use another USB port, check your security software settings or see if you can restore on another computer.
iTunes for Windows: Troubleshooting security software issues -
HI, I need your help. How can I delete all data, when I do not have the special security code, which I didn´t remember ? I also think, that I never create this code before. But I cannot put my settings back.
You must remember the code, if you can't then take the phone and proof of purchase to an Apple Store.
-
I need your help with buying one of your software programs.
I need your help with buying one of your software programs.
First of all I do not want to join this “Creative Cloud” for a monthly plan.
Adobe Illustrator CS6 is what I am wanting but every time I click on the buy button is keeps sending me to a rent page to use but I don’t want this I want to buy it program for my own use. I don’t want to rent it I want to buy it like all the other Adobe software programs that I have bought from you in the past.
Can you help with problem?
Tim Adams
[email protected]You can buy CS6 from this page
Creative Suite 6 -
I need your help, PLEASE. How can to fix "NO MOUNTABLE FILE SYSTEM" error of my back up hard drive on Mountain Lion OS?
Did you format the drive for Mac use before you tried to use it as a backup drive?
Are you using Time Machine on the drive? You can't view the contents of its backup database and the only way to access the info is directly from the Time Machine app. -
My iphone5 was stolen.. i was slept on the bus, pls help how to deactivate it? badly need your help.. its only two months on me
What To Do If Your iDevice Is Lost Or Stolen
If you activated Find My Phone before it was lost or stolen, you can track it only if Wi-Fi is enabled on the device. What you cannot do is track your device using a serial number or other identifying number. You cannot expect Apple or anyone else to find your device for you. You cannot recover your loss unless you insure your device for such loss. It is not covered by your warranty.
If your iPhone, iPod, iPod Touch, or iPad is lost or stolen what do you do? There are things you should have done in advance - before you lost it or it was stolen - and some things to do after the fact. Here are some suggestions:
This link, Re: Help! I misplaced / lost my iPhone 5 today morning in delta Chelsea hotel downtown an I am not able to track it. Please help!, has some good advice regarding your options when your iDevice is lost or stolen.
1. Reporting a lost or stolen Apple product
2. Find my lost iPod Touch
3. AT&T. Sprint, and Verizon can block stolen phones/tablets
4. What-To-Do-When-Iphone-Is-Stolen
5. What to do if your iOS device is lost or stolen
6. 6 Ways to Track and Recover Your Lost/Stolen iPhone
7. Find My iPhone
8. Report Stolen iPad | Stolen Lost Found Online
It pays to be proactive by following the advice on using Find My Phone before you lose your device:
1. Find My iPhone
2. Setup your iDevice on iCloud
3. OS X Lion/Mountain Lion- About Find My Mac
4. How To Set Up Free Find Your iPhone (Even on Unsupported Devices) -
please , i need youre help ! im from Mexico and i dont speak inglish well but ill try explain me... i buy a cs5 students edicion but i lost my paswoord for the instalacion can you helpe me ? how can i recuperade my paswoord
Creative SuitesFind your serial number quickly
Mylenium -
Hi I forgot my security question how I can rest becouse I was going APP this massage pop of in the app page I benn buying app in this iPod may time they are say for first time you are buying apps in iPod pls I need your help to resist my security question
The Three Best Alternatives for Security Questions and Rescue Mail
1. Send Apple an email request at: Apple - Support - iTunes Store - Contact Us.
2. Call Apple Support in your country: Customer Service: Contact Apple support.
3. Rescue email address and how to reset Apple ID security questions.
A substitute for using the security questions is to use 2-step verification:
Two-step verification FAQ Get answers to frequently asked questions about two-step verification for Apple ID. -
I do not know how to avtivate sap early watch,need your help.thanks.
I have finished the installation of solution manager3.2 .Now ,I do not know how to activate early watch,I have learned the relevant notes in sap website,but I still do not know the details about how to activate early watch.who can help me? Do you have references about activating early watch or install guide. I really need your help,I am waiting your answer,and thanks.
my MSN:[email protected] my skype:Day_77Hi,
Kindly note the sequence of steps to be done for EWA generation.
1. Setup of the Server, database and system in transaction SMSY.
2. Generating the RFC's for the System and ensuring that the trusted
RFC works.
3. Adding the system to a logical component and assigning the logical
component to a Solution Landscape created in DSWP.
3. Setting up of EWA from the Solution Settings from the operations
setup in DSWP.
4. Configuring the SDCC / SDCCN on the satellite system (see note Note 763561 ) and adding the Solution Manager RFC to the SDCC settings.
5. Refreshing of sessions via the SDCCN transaction on the Satellite
system. This can be automated via the Auto session Manager Report.
6. Processing of the session and sending the collected data to Solution
manager.
7. Processing the collected data in the Solution Manager System and
generating the EWA Report.
if helpful reward points are appreciated -
Need your help on performance issue please
Hello everyone!
I need your help to understand an effect I notice with a Thread class I built. I currently work on enhancement of my application Playlist Editor (see http://www.lightdev.com/page74.htm) and a new release will be available soon.
Among other extensions the new release will have a title filter function which is based on audio data that is recursively read from ID3 tags of files found in a given root directory. The data collection is done by a CollectionThread class which reads into a data model class AudioDataModel and the entire process works fine, no problem with that.
However, when my application is started for the first time the CollectionThread runs approximately 3 minutes to collect data from approximately 4300 audio files on an Intel Pentium M 1,4 GHz, 512 MB RAM, Windows XP SP2. When the application is shut down and started again, it takes only a few seconds to do the same task for all subsequent launches.
I already tried to start the application with java option -Xms40m to increase initial heap size. This increases performance in general but the effect is still the same, i.e. first run lasts significantly longer than subsequent runs.
I also tried to build a pool mechanism which creates many empty objects in the data model and then releases them to contain the actual data at is being read in but this did not lead to better performance.
It must have to do with how Java (or Windows?) allocates and caches memory. I wonder whether there is a way to pre-allocate memory or if there are any other ideas to improve performance so that the process always only takes seconds instead of minutes?
I attach the key classes to this message. Any help or ideas is much appreciated!
Thanks a lot a best regards
Ulrich
PS: You can use the news subscription service at
http://www.lightdev.com/dynTemplate.php4?id=80&dynPage=subscribe.php4 to be informed when the new release of Playlist Editor is available.
All classes posted here do not need debugging, they already have proven to run error free. The classes are only posted for information for the interested reader - no need to go through all the stuff in detail - only if it interests you.
My application calls class CollectionThread wich is a subclass of InfoThread. CollectionThread recursively goes through a directory and file structure and stores found ID3 tag information in instances of class ID3v11Tag which in turn gets stored in one instance of class AudioDataModel. All classes are shown below.
This is the mentioned CollectionThread
* Light Development Playlist Editor
* Copyright (C) 2004 Ulrich Hilger
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package com.lightdev.app.playlisteditor.data;
import com.lightdev.lib.util.InfoThread;
import java.io.File;
* A class to collect audio data from a given storage location.
* <p>
* <code>CollectionThread</code> uses ID3 tag information to gain data.
* </p>
* <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
* ID3 tags.</p>
* @author Ulrich Hilger
* @author Light Development
* @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
* @author <a href="mailto:[email protected]">[email protected]</a>
* @author published under the terms and conditions of the
* GNU General Public License,
* for details see file gpl.txt in the distribution
* package of this software as well as any licensing notes
* inside this documentation
* @version 1, October 13, 2004
public class CollectionThread extends InfoThread {
* constructor
* @param model AudioDataModel the data model to collect data to
public CollectionThread(AudioDataModel model) {
this.model = model;
* constructor, creates a new empty AudioDataModel
public CollectionThread() {
this(new AudioDataModel());
* set the data model to collect data to
* @param model AudioDataModel the model to collect data to
public void setModel(AudioDataModel model) {
this.model = model;
* get the data model associated to this thread
* @return AudioDataModel the data model
public AudioDataModel getModel() {
return model;
* set the directory to collect data from
* @param rootDir File the directory to collect data from
public void setRootDirectory(File rootDir) {
this.rootDir = rootDir;
* do te actual work of this thread, i.e. iterate through a given directory
* structure and collect audio data
* @return boolean true, if work is left
protected boolean work() {
boolean workIsLeft = true;
maxValue = -1;
filesProcessed = 0;
if(getStatus() < STATUS_HALT_PENDING) {
countElements(rootDir.listFiles());
if(getStatus() < STATUS_HALT_PENDING) {
workIsLeft = collect(rootDir.listFiles());
return workIsLeft;
* count the elements in a given file array including its subdirectories
* @param files File[]
private void countElements(File[] files) {
int i = 0;
while (i < files.length && getStatus() < STATUS_HALT_PENDING) {
File file = files;
if (file.isDirectory()) {
countElements(file.listFiles());
i++;
maxValue++;
* recursively read data into model
* @param files File[] the file array representing the content of a given directory
private boolean collect(File[] files) {
int i = 0;
while(i < files.length && getStatus() < STATUS_HALT_PENDING) {
File file = files[i];
if(file.isDirectory()) {
collect(file.listFiles());
else if(file.getName().toLowerCase().endsWith("mp3")) {
try {
model.addTrack(file);
catch(Exception e) {
fireThreadException(e);
i++;
filesProcessed++;
fireThreadProgress(filesProcessed);
return (i<files.length);
/** the directory to collect data from */
private File rootDir;
/** the data model to collect data to */
private AudioDataModel model;
/** the number of files this thread processed so far while it is running */
private long filesProcessed = 0;
This is class InfoThread
* Light Development Java Library
* Copyright (C) 2003, 2004 Ulrich Hilger
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package com.lightdev.lib.util;
import java.util.Vector;
import java.util.Enumeration;
* Abstract class <code>InfoThread</class> implements a status and listener concept.
* An <code>InfoThread</code> object actively informs all objects registered as listeners about
* status changes, progress and possible exceptions. This way the status of a running
* thread does not require a polling mechanism to be monitored.
* <p>
* <code>InfoThread</code> implements the following working scheme
* </p>
* @author Ulrich Hilger
* @author Light Development
* @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
* @author <a href="mailto:[email protected]">[email protected]</a>
* @author published under the terms and conditions of the
* GNU General Public License,
* for details see file gpl.txt in the distribution
* package of this software
* @version Version 1, October 13, 2004
public abstract class InfoThread extends Thread {
* construct an <code>InfoThread</code> object
* <p>This class is meant to be used when a <code>Thread</code> object is needed that actively
* informs other objects about its status</code>. It is a good idea therefore to register
* one or more listeners with instances of this class before doing anything
* else.</p>
* @see addInfoThreadListener
public InfoThread() {
* set the amount of time this thread shall idle after it is through with one
* work cycle and before a next work cycle is started. This influences the time
* other threads have for their work.
* @param millis long the number of milliseconds to idle after one work cycle
public void setIdleMillis(long millis) {
idleMillis = millis;
* Causes this thread to begin execution; the Java Virtual Machine calls the <code>run</code>
* method of this thread. Calls method <code>prepareThread</code> before calling
* <code>run</code>.
* @see run
* @see prepareThread
public synchronized void start() {
setStatus(STATUS_INITIALIZING);
prepareThread();
setStatus(STATUS_READY);
super.start();
* call method <code>start</code> instead of this method.
* calling this method directly will lead to an exception
* @see start
public void run() {
//System.out.println("InfoThread.run");
if (status == STATUS_READY) {
boolean workIsLeft = true;
setStatus(STATUS_RUNNING);
while (status < STATUS_STOP_PENDING && workIsLeft) {
if (status < STATUS_HALT_PENDING) {
workIsLeft = work();
if(!workIsLeft) {
setStatus(STATUS_WORK_COMPLETE);
if (status == STATUS_HALT_PENDING) {
setStatus(STATUS_HALTED);
else if (status == STATUS_STOP_PENDING) {
setStatus(STATUS_STOPPED);
else {
try {
sleep(idleMillis);
catch (InterruptedException e) {
fireThreadException(e);
else {
// error: Thread is not ready to run
setStatus(STATUS_THREAD_FINISHED);
* stop this thread. This will terminate the thread irrevokably. Use method
* <code>haltThread</code> to pause a thread with the possiblity to resume work later.
* @see haltThread
public void stopThread() {
switch (status) {
case STATUS_RUNNING:
setStatus(STATUS_STOP_PENDING);
break;
case STATUS_HALT_PENDING:
// exception: the thread already is about to halt
break;
case STATUS_STOP_PENDING:
// exception: the thread already is about to stop
break;
default:
// exception: a thread can not be stopped, when it is not running
break;
* halt this thread, i.e. pause working allowing to resume later
* @see resumeThread
public void haltThread() {
switch (status) {
case STATUS_RUNNING:
setStatus(STATUS_STOP_PENDING);
break;
case STATUS_HALT_PENDING:
// exception: the thread already is about to halt
break;
case STATUS_STOP_PENDING:
// exception: the thread already is about to stop
break;
default:
// exception: a thread can not be halted, when it is not running
break;
* resume this thread, i.e. resume previously halted work
* @see haltThread
public void resumeThread() {
if(status == STATUS_HALTED || status == STATUS_HALT_PENDING) {
setStatus(STATUS_RUNNING);
else {
// exception: only halted threads or threads that are about to halt can be resumed
* this is the method to prepare a thread to run. It is not implemented in this abstract
* class. Subclasses of <code>InfoThread</code> can implement this method to do anything
* that might be required to put their thread into STATUS_READY. This method is called
* automatically by method <code>start</code>. When implementing this method, it should
* call method <code>fireThreadException</code> accordingly.
* @see start
* @see fireThreadException
protected void prepareThread() {
// does nothing in this abstract class but might be needed in subclasses
* this is the main activity method of this object. It is not implemented in this abstract
* class. Subclasses of <code>InfoThread</code> must implement this method to do something
* meaningful. When implementing this method, it should call methods
* <code>fireThreadProgress</code> and <code>fireThreadException</code> accordingly.
* @return boolean true, if work is left, false if not
* @see fireThreadProgress
* @see fireTreadException
protected abstract boolean work();
* add an <code>InfoTreadListener</code> to this instance of <code>InfoThread</code>
* @param l InfoThreadListener the listener to add
* @see removeInfoThreadListener
public void addInfoThreadListener(InfoThreadListener l) {
listeners.add(l);
* remove an <code>InfoTreadListener</code> from this instance of <code>InfoThread</code>
* @param l InfoThreadListener the listener to remove
public void removeInfoThreadListener(InfoThreadListener l) {
listeners.remove(l);
* notify all <code>InfoThreadListener</code>s of a status change
* @param fromStatus int the status tis thread had before the change
* @param toStatus int the status this thread has now
protected void fireThreadStatusChanged(int fromStatus, int toStatus) {
Enumeration e = listeners.elements();
while(e.hasMoreElements()) {
Object l = e.nextElement();
if(l instanceof InfoThreadListener) {
((InfoThreadListener) l).threadStatusChanged(this, fromStatus, toStatus);
* notify all <code>InfoThreadListener</code>s of an exception in this thread
* @param ex Exception the exception that occurred
protected void fireThreadException(Exception ex) {
Enumeration e = listeners.elements();
while(e.hasMoreElements()) {
Object l = e.nextElement();
if(l instanceof InfoThreadListener) {
((InfoThreadListener) l).threadException(this, ex);
* notify all <code>InfoThreadListener</code>s of the progress of this thread
* @param progressValue long a value indicating the current thread progress
protected void fireThreadProgress(long progressValue) {
Enumeration e = listeners.elements();
while(e.hasMoreElements()) {
Object l = e.nextElement();
if(l instanceof InfoThreadListener) {
((InfoThreadListener) l).threadProgress(this, progressValue, maxValue);
* set the status of this thread and notify all listeners
* @param newStatus int the status this thread is to be changed to
private void setStatus(int newStatus) {
//System.out.println("InfoThread.setStatus oldStatus=" + status + ", newStatus=" + newStatus);
int fromStatus = status;
status = newStatus;
fireThreadStatusChanged(fromStatus, newStatus);
* get the current status of this thread
* @return int the status
public int getStatus() {
return status;
* cleanup before actual destruction.
public void destroy() {
//System.out.println("InfoThread.destroy");
cleanup();
super.destroy();
* cleanup all references this thread maintains
private void cleanup() {
//System.out.println("InfoThread.cleanup");
listeners.removeAllElements();
listeners = null;
/* ----------------------- class fields start ------------------------ */
/** storage for the objects this thread notifies about status changes and progress */
private Vector listeners = new Vector();
/** indicator for the status of this thread */
private int status = STATUS_NONE;
/** maximum value for threadProgress */
protected long maxValue = -1;
/** the idle time inside one work cycle in milliseconds */
protected long idleMillis = 1;
/* ----------------------- class fields end -------------------------- */
/* ----------------------- constants start --------------------------- */
/** constant value indicating that no status has been set so far */
public static final int STATUS_NONE = 0;
/** constant value indicating that the thread is currently initializing */
public static final int STATUS_INITIALIZING = 1;
/** constant value indicating that the thread is ready to run */
public static final int STATUS_READY = 2;
/** constant value indicating that the thread is running */
public static final int STATUS_RUNNING = 3;
/** constant value indicating that the thread is about to halt */
public static final int STATUS_HALT_PENDING = 4;
/** constant value indicating that the thread is halted */
public static final int STATUS_HALTED = 5;
/** constant value indicating that the work of this thread is complete */
public static final int STATUS_WORK_COMPLETE = 6;
/** constant value indicating that the thread is about to stop */
public static final int STATUS_STOP_PENDING = 7;
/** constant value indicating that the thread is stopped */
public static final int STATUS_STOPPED = 8;
/** constant value indicating that the thread is finished */
public static final int STATUS_THREAD_FINISHED = 9;
/* ----------------------- constants end --------------------------- */
}this is the InfoThreadListener interface
* Light Development Java Library
* Copyright (C) 2003, 2004 Ulrich Hilger
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package com.lightdev.lib.util;
* An interface classes interested to receive events from objects
* of class <code>InfoThread</code> need to implement.
* @author Ulrich Hilger
* @author Light Development
* @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
* @author <a href="mailto:[email protected]">[email protected]</a>
* @author published under the terms and conditions of the
* GNU General Public License,
* for details see file gpl.txt in the distribution
* package of this software
* @version Version 1, October 13, 2004
public interface InfoThreadListener {
* method to receive a status change notification from a thread
* @param thread InfoThread the thread which status changed
* @param fromStatus int the status which the thread had before the change
* @param toStatus int the status which the thread has now
public void threadStatusChanged(InfoThread thread, int fromStatus, int toStatus);
* method to receive a notification about the progress of a thread
* @param thread InfoThread the thread which notified about its progress
* @param progressValue long the value (e.g. 10 if 100 percent completed, 20 of 1 million files processed, etc.)
public void threadProgress(InfoThread thread, long progressValue, long maxValue);
* method to receive a notifiaction about the fact that an exception occurred in a thread
* @param thread InfoThread the thread for which an exception occurred
* @param e Exception the exception that occurred
public void threadException(InfoThread thread, Exception e);
}This is class AudioFileDescriptor
* Light Development Java Library
* Copyright (C) 2004 Ulrich Hilger
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package com.lightdev.lib.audio;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.text.DecimalFormat;
* This class models characteristics of an audio file such as the absolute path
* of the file, its tag contents (if any) and the play duration, etc.
* <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
* ID3 tags.</p>
* @author Ulrich Hilger
* @author Light Development
* @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
* @author <a href="mailto:[email protected]">[email protected]</a>
* @author published under the terms and conditions of the
* GNU General Public License,
* for details see file gpl.txt in the distribution
* package of this software
* @version Version 1, October 13, 2004
public class AudioFileDescriptor implements Serializable, Comparable {
public AudioFileDescriptor(String absolutePath) throws FileNotFoundException, IOException {
load(absolutePath);
public boolean equals(Object o) {
if(o != null && o instanceof AudioFileDescriptor) {
return ((AudioFileDescriptor) o).getAbsolutePath().equalsIgnoreCase(this.getAbsolutePath());
else {
return false;
public void load(String absolutePath) throws FileNotFoundException, IOException {
this.absolutePath = absolutePath;
RandomAccessFile rf = new RandomAccessFile(absolutePath, "r");
if(id3v11Tag == null) {
id3v11Tag = new ID3v11Tag(rf, false);
else {
id3v11Tag.readTag(rf, rf.length() - 128);
rf.close();
public String getAbsolutePath() {
return absolutePath;
public ID3v11Tag getID3v11Tag() {
return id3v11Tag;
public void setID3v11Tag(ID3v11Tag tag) {
this.id3v11Tag = tag;
public String toString() {
DecimalFormat df = new DecimalFormat("00");
return id3v11Tag.getArtist() + ", " + id3v11Tag.getAlbum() + " - " +
df.format(id3v11Tag.getTrackNumber()) + " " + id3v11Tag.getTitle();
* Compares this object with the specified object for order.
* @param o the Object to be compared.
* @return a negative integer, zero, or a positive integer as this object is less than, equal to,
* or greater than the specified object.
* @todo Implement this java.lang.Comparable method
public int compareTo(Object o) {
return toString().compareTo(o.toString());
private String absolutePath;
private ID3v11Tag id3v11Tag;
private transient long duration = -1;
private transient int type = TYPE_UNKNOWN;
public static final transient int TYPE_UNKNOWN = 0;
public static final transient int TYPE_MP3 = 1;
}This is class ID3V11Tag into which the data is actually stored
* Light Development Java Library
* Copyright (C) 2004 Ulrich Hilger
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package com.lightdev.lib.audio;
import java.io.File;
import java.io.RandomAccessFile;
import java.io.IOException;
import java.io.Serializable;
import java.text.DecimalFormat;
* This class is a very simple implementation of an ID3v11Tag. It models an ID3 tag
* pretty much the same way as it is physically stored inside an audio file.
* <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
* ID3 tags.</p>
* @author Ulrich Hilger
* @author Light Development
* @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
* @author <a href="mailto:[email protected]">[email protected]</a>
* @author published under the terms and conditions of the
* GNU General Public License,
* for details see file gpl.txt in the distribution
* package of this software
* @version Version 1, October 13, 2004
public class ID3v11Tag implements Serializable, Comparable {
* construct an ID3v11Tag and read tag content from a given file
* <p>This constructor can be used for cases where a RandomAccessFile has already
* been opened and will be closed elsewhere</p>
* @param rf RandomAccessFile the open file to read from
* @param isAtTagStartPos boolean true, if the file pointer is at the
* position where the ID3 tag starts; when false, the pointer is positioned accordingly here
* @throws IOException
public ID3v11Tag(RandomAccessFile rf, boolean isAtTagStartPos) throws IOException {
if(isAtTagStartPos) {
readTag(rf);
else {
readTag(rf, rf.length() - 128);
* construct an ID3v11Tag and read tag content from a file at a given location
* <p>This constructor opens and closes the audio file for reading</p>
* @param absolutePath String the absolute path to the audio file to open
* @throws IOException
public ID3v11Tag(String absolutePath) throws IOException {
RandomAccessFile rf = new RandomAccessFile(absolutePath, "r");
readTag(rf, rf.length() - 128);
rf.close();
* construct an ID3v11Tag and read tag content from a given file
* <p>This constructor opens and closes the audio file for reading</p>
* @param audioFile File the audio file to read from
* @throws IOException
public ID3v11Tag(File audioFile) throws IOException {
this(audioFile.getAbsolutePath());
* get a string representation of this object
* @return String
public String toString() {
DecimalFormat df = new DecimalFormat("00");
return getArtist() + ", " + getAlbum() + " - " + df.format(getTrackNumber()) + " " + getTitle();
* position to file pointer and read the tag
* @param rf RandomAccessFile the file to read from
* @param jumpPos long the position to jump to (the tag start position)
* @throws IOException
public void readTag(RandomAccessFile rf, long jumpPos) throws IOException {
rf.seek(jumpPos);
readTag(rf);
* read the tag from a given file, assuming the file pointer to be at the tag start position
* @param rf RandomAccessFile the file to read from
* @throws IOException
public void readTag(RandomAccessFile rf) throws IOException {
rf.read(tagBuf);
if(tag.equalsIgnoreCase(new String(tagBuf))) {
rf.read(title);
rf.read(artist);
rf.read(album);
rf.read(year);
rf.read(comment);
rf.read(trackNo);
rf.read(genre);
public String getTitle() {
return new String(title).trim();
public String getArtist() {
return new String(artist).trim();
public String getAlbum() {
return new String(album).trim();
public String getYear() {
return new String(year).trim();
public String getComment() {
return new String(comment).trim();
public int getGenreId() {
try {
int id = new Byte(genre[0]).intValue();
if(id < GENRE_ID_MIN || id > GENRE_ID_MAX) {
return GENRE_ID_OTHER;
else {
return id;
catch(Exception ex) {
return GENRE_ID_OTHER;
public String getGenreName() {
return genreNames[getGenreId()];
public int getTrackNumber() {
try {
return (int) trackNo[0];
catch(Exception e) {
return 0;
* Compares this object with the specified object for order.
* @param o the Object to be compared.
* @return a negative integer, zero, or a positive integer as this object is less than, equal to,
*Hi Franck,
thank you, mate. I did what you suggested (changed class attached) but that did not change the mentioned behaviour.
The first run is approximately 75 seconds with Java option -Xms40m and approx. double without, the second run and all subsequent runs are only 2-3 seconds each (!!!) even when terminating and re-starting the application between thread runs.
I'm pretty clueless about that, any more help on this anyone?
Thanks a lot and best regards
Ulrich
PS: BTW, I forgot to post the class that is filled with data by class CollectionThread, so here it is
* Light Development Playlist Editor
* Copyright (C) 2004 Ulrich Hilger
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package com.lightdev.app.playlisteditor.data;
import java.io.File;
import com.lightdev.lib.audio.ID3v11Tag;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.IOException;
import java.io.Serializable;
import com.lightdev.lib.audio.AudioFileDescriptor;
import com.lightdev.lib.ui.SortListModel;
import java.util.Iterator;
* Storage model for audio data.
* <p>
* <code>AudioDataModel</code> can be used to store ID3 tag data collected from
* a directory with audio files to perform queries and reports on the found data.
* </p>
* <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
* ID3 tags.</p>
* @author Ulrich Hilger
* @author Light Development
* @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
* @author <a href="mailto:[email protected]">[email protected]</a>
* @author published under the terms and conditions of the
* GNU General Public License,
* for details see file gpl.txt in the distribution
* package of this software as well as any licensing notes
* inside this documentation
* @version 1, October 15, 2004
public class AudioDataModel extends SortListModel implements Serializable {
* constructor
public AudioDataModel() {
* add an audio track from a given audio file
* <p>This will attempt to read ID3 tag data from the file.</p>
* @param audioFile File the file to add audio data for
* @throws IOException
public void addTrack(File audioFile) throws IOException {
AudioFileDescriptor afd = new AudioFileDescriptor(audioFile.getAbsolutePath());
if (!data.contains(afd)) {
data.add(afd);
* get all tracks for agiven combination of genre name, artist name and album name. Any of
* the parameters may be null or AudioDataModel.FILTER_ALL
* <p>Ugly code, I know, but it simply hard codes all combinations of the the mentioned
* parameters. Any more elegant implementations welcome.</p>
* @param genreName String a genre name to get tracks for
* @param artistName String an artist name to get tracks for
* @param albumName String an album name to get tracks for
* @return SortListModel the found tracks in a list model
public SortListModel getTracks(String genreName, String artistName, String albumName) {
SortListModel foundTracks = new SortListModel();
Iterator e = data.iterator();
while(e.hasNext()) {
AudioFileDescriptor afd = (AudioFileDescriptor) e.next();
ID3v11Tag tag = afd.getID3v11Tag();
if(genreName == null || genreName.equalsIgnoreCase(FILTER_ALL)) {
if(artistName == null || artistName.equalsIgnoreCase(FILTER_ALL)) {
if (tag.getAlbum().equalsIgnoreCase(albumName))
foundTracks.add(afd);
else {
if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
if (tag.getArtist().equalsIgnoreCase(artistName))
foundTracks.add(afd);
else {
if (tag.getArtist().equalsIgnoreCase(artistName) &&
tag.getAlbum().equalsIgnoreCase(albumName))
foundTracks.add(afd);
else {
if(artistName == null || artistName.equalsIgnoreCase(FILTER_ALL)) {
if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
if (tag.getGenreName().equalsIgnoreCase(genreName))
foundTracks.add(afd);
else {
if (tag.getGenreName().equalsIgnoreCase(genreName) &&
tag.getAlbum().equalsIgnoreCase(albumName))
foundTracks.add(afd);
else {
if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
if (tag.getGenreName().equalsIgnoreCase(genreName) &&
tag.getArtist().equalsIgnoreCase(artistName))
foundTracks.add(afd);
else {
if (tag.getGenreName().equalsIgnoreCase(genreName) &&
tag.getArtist().equalsIgnoreCase(artistName) &&
tag.getAlbum().equalsIgnoreCase(albumName))
foundTracks.add(afd);
foundTracks.sort();
return foundTracks;
* list all artists in this model
* @return SortListModel
public SortListModel listArtists() {
SortListModel artists = new SortListModel();
artists.add(FILTER_ALL);
Iterator e = data.iterator();
while (e.hasNext()) {
ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
String artistName = tag.getArtist();
if (artists.indexOf(artistName) < 0) {
artists.add(artistName);
artists.sort();
return artists;
* list all artists in this model having titles belonging to a given genre
* @param genreName String name of the genre artists are searched for
* @return SortListModel
public SortListModel listArtists(String genreName) {
SortListModel artists = new SortListModel();
artists.add(FILTER_ALL);
Iterator e = data.iterator();
while (e.hasNext()) {
ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
String artistName = tag.getArtist();
String genre = tag.getGenreName();
if (artists.indexOf(artistName) < 0 && genre.equalsIgnoreCase(genreName)) {
artists.add(artistName);
artists.sort();
return artists;
* list all genres in this model
* @return SortListModel
public SortListModel listGenres() {
SortListModel genres = new SortListModel();
genres.add(FILTER_ALL);
Iterator e = data.iterator();
while (e.hasNext()) {
ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
String genreName = tag.getGenreName();
if (genres.indexOf(genreName) < 0) {
genres.add(genreName);
genres.sort();
return genres;
* list all albums in this model
* @return SortListModel
public SortListModel listAlbums() {
SortListModel albums = new SortListModel();
albums.add(FILTER_ALL);
Iterator e = data.iterator();
while (e.hasNext()) {
ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
String albumName = tag.getAlbum();
if (albums.indexOf(albumName) < 0) {
albums.add(albumName);
albums.sort();
return albums;
* list all albums in this model having titles belonging to a given genre
* @param genreName String name of the genre albums are searched for
* @return SortListModel
public SortListModel listAlbums(String genreName) {
SortListModel albums = new SortListModel();
albums.add(FILTER_ALL);
Iterator e = data.iterator();
while (e.hasNext()) {
ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
String albumName = tag.getAlbum();
String genre = tag.getGenreName();
if (albums.indexOf(albumName) < 0 && genre.equalsIgnoreCase(genreName)) {
albums.add(albumName);
albums.sort();
return albums;
* list all albums in this model having titles belonging to a given genre and artist
* @param genreName String name of the genre albums are searched for
* @param artistName String name of the artist albums are searched for
* @return SortListModel
public SortListModel listAlbums(String genreName, String artistName) {
SortListModel albums = new SortListModel();
albums.add(FILTER_ALL);
Iterator e = data.iterator();
while (e.hasNext()) {
ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
String albumName = tag.getAlbum();
String genre = tag.getGenreName();
String artist = tag.getArtist();
if(genreName == null || genreName.equalsIgnoreCase(FILTER_ALL)) {
if (albums.indexOf(albumName) < 0 &&
artist.equalsIgnoreCase(artistName))
albums.add(albumName);
else {
if (albums.indexOf(albumName) < 0 &&
genre.equalsIgnoreCase(genreName) &&
artist.equalsIgnoreCase(artistName))
albums.add(albumName);
albums.sort();
return albums;
* get the number of audio tracks stored in this data model
* @return int the number of tracks
public int getTrackCount() {
return data.size();
/** constant to select all items of a given part */
public static final String FILTER_ALL = " all";
}...and here the changed CollectionThread now caching found File objects in a vector
* Light Development Playlist Editor
* Copyright (C) 2004 Ulrich Hilger
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package com.lightdev.app.playlisteditor.data;
import com.lightdev.lib.util.InfoThread;
import java.io.File;
import java.util.Vector;
import java.util.Enumeration;
* A class to collect audio data from a given storage location.
* <p>
* <code>CollectionThread</code> uses ID3 tag information to gain data.
* </p>
* <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
* ID3 tags.</p>
* @author Ulrich Hilger
* @author Light Development
* @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
* @author <a href="mailto:[email protected]">[email protected]</a>
* @author published under the terms and conditions of the
* GNU General Public License,
* for details see file gpl.txt in the distribution
* package of this software as well as any licensing notes
* inside this documentation
* @version 1, October 13, 2004
public class CollectionThread extends InfoThread {
* constructor
* @param model AudioDataModel the data model to collect data to
public CollectionThread(AudioDataModel model) {
this.model = model;
* constructor, creates a new empty AudioDataModel
public CollectionThread() {
this(new AudioDataModel());
* set the data model to collect data to
* @param model AudioDataModel the model to collect data to
public void setModel(AudioDataModel model) {
this.model = model;
* get the data model associated to this thread
* @return AudioDataModel the data model
public AudioDataModel getModel() {
return model;
* set the directory to collect data from
* @param rootDir File the directory to collect data from
public void setRootDirectory(File rootDir) {
this.rootDir = rootDir;
* this is the method to prepare a thread to run.
protected void prepareThread() {
maxValue = -1;
filesProcessed = 0;
innerCount = 0;
fileList = new Vector();
* do the actual work of this thread, i.e. iterate through a given directory
* structure and collect audio data
* @return boolean true, if work is left
protected boolean work() {
boolean workIsLeft = true;
if(getStatus() < STATUS_HALT_PENDING) {
countElements(rootDir.listFiles());
if(getStatus() < STATUS_HALT_PENDING) {
workIsLeft = collect(); //collect(rootDir.listFiles());
fileList.clear();
fileList = null;
return workIsLeft;
* count the elements in a given file array including its subdirectories
* @param files File[]
private void countElements(File[] files) {
int i = 0;
while (i < files.length && getStatus() < STATUS_HALT_PENDING) {
File file = files;
if (file.isDirectory()) {
countElements(file.listFiles());
else {
fileList.add(file);
i++;
maxValue++;
* read data into model
* @param files File[] the file array representing the content of a given directory
* @return boolean true, if work is left
private boolean collect(/*File[] files*/) {
Enumeration files = fileList.elements();
while(files.hasMoreElements() && getStatus() < STATUS_HALT_PENDING) {
File file = (File) files.nextElement();
try {
model.addTrack(file);
catch(Exception e) {
fireThreadException(e);
filesProcessed++;
if(++innerCount > 99) {
innerCount = 0;
fireThreadProgress(filesProcessed);
return false;
int i = 0;
while(i < files.length && getStatus() < STATUS_HALT_PENDING) {
File file = files[i];
if(file.isDirectory()) {
collect(file.listFiles());
else if(file.getName().toLowerCase().endsWith("mp3")) {
try {
model.addTrack(file);
catch(Exception e) {
fireThreadException(e);
i++;
filesProcessed++;
fireThreadProgress(filesProcessed);
return (i<files.length);
/** the directory to collect data from */
private File rootDir;
/** the data model to collect data to */
private AudioDataModel model;
/** the number of files this thread processed so far while it is running */
private long filesProcessed = 0;
/** a list to temporary store found files */
private Vector fileList;
/** counter to determine when to fire progress messages */
private int innerCount = 0;
Maybe you are looking for
-
Internet Explorer 7 (IE) and Password Sites Don't Work
Presently, I have determined that passworded site created with iWeb '08 (2.0.4) don't work correctly with Internet Explorer 7 (IE). It should be noted the the site is a album page with multiple albums. The password process fails in that it repeatedly
-
H.264 not playing in Safari
I am playing H.264 files progressively (in this case, using JW FLV player, but have encountered the problem outside of that player as well) - they play fine and download progressively in Firefox (on both PC & Mac), & IE, however, it crashes in Safari
-
After upgrading to iOS 8 on my iPhone 5s, the events in photo album have changed order
After upgrading iPhone 5S to iOS 8, the order of events on iPhone have changed from alphabetic to random. I want to restore them to alphabetic order. Pls help
-
Stumped and Desperate for Advice
I've got a WLAN setup throughout three buildings. Centrally I've got a WRT300N router as well as a couple of computers using WMP54GR adapters. My most distant computer (a desktop terminal) is also using a WMP54GR linked by a Wireless-G range expand
-
HOW TO REDUCE SIZE OF IMAGE?
when i open my mac book the image is so large i do no see the whole page