How the protected finalize method is called by garbage collector

Dear All,
I have a double regarding the calling mechanism of finalize method. The access specifier of finalize method is protected, not only that if a class overrides this method then also the finalize method can be protected in the subclass of Object. But the concept of protected access specifier is, from outside of the package it can be accessed only from subclass.
The program (may be part of Garbage collector), which calls this (finalize) method mast not be in the same package (that is java.jang) nor it is a subclass of the class (whose finalize method it calls).
Then how the finalize method is getting called by the garbage collector when it is protected?
Regards,
Gourab

Refer to following link for the details
http://www.me.umn.edu/~shivane/blogs/cafefeed/2005/09/why-is-finalize-method-protected.html
The link gives answer to how a protected/private members are accessible to JVM or GC and why finalize is declared protected.

Similar Messages

  • How can I access the protected inherited method

    Hi guys:
    I know I can use getDeclaredMethod to get some methods,but my question how can I get a protected inherited method? for example
    class A{
    protected void test(){}
    class B extends A{
    public String getValue(){}
    class C{
    public static void main(Strin[] args){
    //at here I want to access "test" method by reflection,but I dont know how?
    thanks advance!

    Indeed it does. If you want to find the declared methods of the superclass then you should be able to figure out how to do that: find the superclass, find its declared methods.

  • How to get a method to call the correct passed object in the constructor

    I have 2 constructors for a certain object:
    public class ABC{
    //variables
    private DEF def;
    private GHI ghi;
    public ABC(DEF def){
    this.def = def;
    someMethod();
    public ABC(GHI ghi){
    this.ghi = ghi;
    someMethod();
    }Now, this someMethod() references / calls a method from the 2 classes passed in the constructor say def.getSome() and ghi.getSome().
    Depending on which constructor is used, it should call the respective xxx.getSome(). Do I need to write 2 someMethod()s or is there a way that one method will call the proper xxx.getSome() ?
    Thanks.....

    Hi
    Following the example may be help to you call correct method,
    // Interface QuizMaster
    public interface QuizMaster {
         public String popQuestion();
    // Class StrutsQuizMaster
    public class StrutsQuizMaster implements QuizMaster{
         public String popQuestion() {
              return "Are you new to Struts?";
    // Class SpringQuizMaster
    public class SpringQuizMaster implements QuizMaster{
         public String popQuestion() {
              return "Are you new to Spring?";
    // Class QuizMasterService
    public class QuizMasterService {
         QuizMaster quizMaster;
         public QuizMasterService(SpringQuizMaster quizMaster){
              this.quizMaster = quizMaster;
         public QuizMasterService(StrutsQuizMaster quizMaster){
              this.quizMaster = quizMaster;
         public void askQuestion()
              System.out.println(quizMaster.popQuestion());
    // QuizProgram
    public class QuizProgram {
         public static void main(String[] args) {
              // Option : 1
    // StrutsQuizMaster quizMaster = new StrutsQuizMaster();
    // Option : 2
    SpringQuizMaster quizMaster = new SpringQuizMaster();
              QuizMasterService quizMasterService = new QuizMasterService(quizMaster);                    
              quizMasterService.askQuestion();
    here you can create object of StrutsQuizMaster or SpringQuizMaster and pass into the QuizMasterService object constructor, base on the object correct method will be called.

  • Finalize() method being called multiple times for same object?

    I got a dilly of a pickle here.
    Looks like according to the Tomcat output log file that the finalize method of class User is being called MANY more times than is being constructed.
    Here is the User class:
    package com.db.multi;
    import java.io.*;
    import com.db.ui.*;
    import java.util.*;
    * @author DBriscoe
    public class User implements Serializable {
        private String userName = null;
        private int score = 0;
        private SocketImage img = null;
        private boolean gflag = false;
        private Calendar timeStamp = Calendar.getInstance();
        private static int counter = 0;
        /** Creates a new instance of User */
        public User() { counter++;     
        public User(String userName) {
            this.userName = userName;
            counter++;
        public void setGflag(boolean gflag) {
            this.gflag = gflag;
        public boolean getGflag() {
            return gflag;
        public void setScore(int score) {
            this.score = score;
        public int getScore() {
            return score;
        public void setUserName(String userName) {
            this.userName = userName;
        public String getUserName() {
            return userName;
        public void setImage(SocketImage img) {
            this.img = img;
        public SocketImage getImage() {
            return img;
        public void setTimeStamp(Calendar c) {
            this.timeStamp = c;
        public Calendar getTimeStamp() {
            return this.timeStamp;
        public boolean equals(Object obj) {
            try {
                if (obj instanceof User) {
                    User comp = (User)obj;
                    return comp.getUserName().equals(userName);
                } else {
                    return false;
            } catch (NullPointerException npe) {
                return false;
        public void finalize() {
            if (userName != null && !userName.startsWith("OUTOFDATE"))
                System.out.println("User " + userName + " destroyed. " + counter);
        }As you can see...
    Every time a User object is created, a static counter variable is incremented and then when an object is destroyed it appends the current value of that static member to the Tomcat log file (via System.out.println being executed on server side).
    Below is the log file from an example run in my webapp.
    Dustin
    User Queue Empty, Adding User: com.db.multi.User@1a5af9f
    User Dustin destroyed. 0
    User Dustin destroyed. 0
    User Dustin destroyed. 0
    User Dustin destroyed. 0
    User Dustin destroyed. 0
    USER QUEUE: false
    INSIDE METHOD: false
    AFTER METHOD: false
    User Dustin destroyed. 1
    User Dustin destroyed. 1
    User Dustin destroyed. 1
    User Dustin destroyed. 1
    USER QUEUE: false
    INSIDE METHOD: false
    AFTER METHOD: false
    User Dustin destroyed. 2
    User Dustin destroyed. 2
    User Dustin destroyed. 2
    User Dustin destroyed. 2
    User Dustin destroyed. 2
    User Dustin destroyed. 2
    User Dustin destroyed. 2
    User Dustin destroyed. 2
    USER QUEUE: false
    INSIDE METHOD: false
    AFTER METHOD: false
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    User Dustin destroyed. 3
    USER QUEUE: false
    INSIDE METHOD: false
    AFTER METHOD: false
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    User Dustin destroyed. 4
    USER QUEUE: false
    INSIDE METHOD: false
    AFTER METHOD: false
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    User Dustin destroyed. 5
    USER QUEUE: false
    INSIDE METHOD: false
    AFTER METHOD: false
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    User Dustin destroyed. 6
    Joe
    USER QUEUE: false
    INSIDE METHOD: false
    AFTER METHOD: false
    User Dustin pulled from Queue, Game created: Joe
    User Already Placed: Dustin with Joe
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    User Dustin destroyed. 7
    INSIDE METHOD: false
    INSIDE METHOD: false
    USER QUEUE: true
    INSIDE METHOD: false
    INSIDE METHOD: false
    User Dustin destroyed. 9
    User Joe destroyed. 9
    User Dustin destroyed. 9
    User Dustin destroyed. 9
    User Dustin destroyed. 9
    User Dustin destroyed. 9
    INSIDE METHOD: true
    INSIDE METHOD: false
    USER QUEUE: true
    INSIDE METHOD: false
    INSIDE METHOD: false
    INSIDE METHOD: true
    INSIDE METHOD: false
    USER QUEUE: true
    INSIDE METHOD: false
    INSIDE METHOD: false
    It really does seem to me like finalize is being called multiple times for the same object.
    That number should incremement for every instantiated User, and finalize can only be called once for each User object.
    I thought this was impossible?
    Any help is appreciated!

    Thanks...
    I am already thinking of ideas to limit the number of threads.
    Unfortunately there are two threads of execution in the servlet handler, one handles requests and the other parses the collection of User objects to check for out of date timestamps, and then eliminates them if they are out of date.
    The collection parsing thread is currently a javax.swing.Timer thread (Bad design I know...) so I believe that I can routinely check for timestamps in another way and fix that problem.
    Just found out too that Tomcat was throwing me a ConcurrentModificationException as well, which may help explain the slew of mysterious behavior from my servlet!
    The Timer thread has to go. I got to think of a better way to routinely weed out User objects from the collection.
    Or perhaps, maybe I can attempt to make it thread safe???
    Eg. make my User collection volatile?
    Any opinions on the best approach are well appreciated.

  • How do I keep track of how many times a method is called inside anthr clas?

    I am writing code for a program that solves a Knight's Tour. A Knight's Tour is a path a Knight Chess piece can take around the board starting at any spot, touching every square once, and only once. I have to write 2 classes and one is provided. The provided class is encrypted and written by our professor. All I know that it does is simulates the game using the two classes I write and provides a print out and prompts to ask the user which square they want to move to next.
    The square class I have to write consists of a constructor that makes a square object that keeps track of its color (white/black) and its status (whether it has been visited, is occupied by the knight, or is free and has not be visited).
    The GameBoard class I have to write is what I am having problems with. I am writing a method that determines how many squares have been visited. The previous mentioned class that my professor wrote for me contains a method moveKnight();. The way the program works is that every time moveKnight() is called a square's status is changed to occupied and therefore visited later. moveKnight() will only work if the move requested by the user is a valid move.
    SO! My main problem (sorry for all the explaining, just trying to give you all the information) is that I don't know how to keep track of how many times moveKnight() is called by the program. If i can figure this out it should be simple. I'm new to java but i believe...
    if(moveKnight() is called)
    {count++;} //count is a member variable already initialized
    return count;
    the moveKnight() is called section within the if() statement is what I am unclear how to do. Please help.
    Thanks, Veritas

    in your case you want 'count' to be a class attribute rather than a local variable. But yes, incrementing it each time that the method is called will serve your purpose.

  • How populate and execute methods gets called in UserDefined Action Classes?

    In Struts2, if we override methods populate() and execute() , then if we made any request to some Action class which overrides these methods, then how does it look for these 2 methods??
    and why populate() method called first and later execute() method????
    Harishwar
    Edited by: Harishwar_Madhya on Sep 3, 2010 2:47 AM
    Edited by: Harishwar_Madhya on Sep 3, 2010 2:49 AM

    45RPMSoftware wrote:
    Thanks for this. Alas, I do not have the source code used to generate the jar file, and I have no means of getting it. I imagine, therefore, that I will not be able to update the manifest file.The manifest file is just a simple text file.
    You can get at it by unpacking/repacking the jar file with the jar utility (tar like syntax).
    ... I assume that classpath is rather like the unix path.It specifies a list of jar files and directories containing java class files (and more).
    Is there anything that defines the classpath for each login session and, if so, how do I add to it?As the link I posted says;
    you can set a CLASSPATH env.var.

  • How The ABAP Proxy method gets triggered

    Hi All,
    I have created a ABAP Proxy for inbound interface.For this interface the data is coming from XI system.So i am writing the logic to read the XI data into an internal table and am populating the same data into a BAPI.
    So my question is,once the XI system sends the data, Will this ABAP Proxy Method automatically gets trigger or Do we need to make any settings?
    Please Help me As early as possible.
    Thanks in advance
    Regards
    Srinivas Kodukula

    Hi srinivas,
    Refer the below points for the configuration needed at R/3 side:
    1. Create a HTTP connection in the business system using transaction SM59
    2. Configuration Business system as local Integration Engine in SXMB_ADM
    3. Connection between Business System and System Landscape Directory. For this check the RFC destinations LCRSAPRFC and SAPSLDAPI
    4. Maintaining the SAP J2EE Connection Parameters for LCRSAPRFC and SAPSLDAPI in SAP J2EE engine
    5. Maintain SLD access details in Transaction SLDAPICUST
    Regards,
    Kiran Bobbala

  • How actually finalize() method works?

    Hi,
    [b]
    When the finalize method is called by GC or not? I made some simple test, please have a look at this code:
    package finalizetest;
    * @author krzys
    public class Test {
        /** Creates a new instance of Test */
        public Test() {
        public void finalize() {
            System.out.println("finalize...");
         * @param args the command line arguments
        public static void main(String[] args) {
            // TODO code application logic here
            Test test = new Test();
            test = null;
            System.gc(); //when calling of GC is commented, then finalize doesn't work
    }If the System.gc() is called then finalize is invoked, if the line is ommited, then happens nothing
    How it works?
    Krzysztof

    There's no guarantee that finalize() will be called, ever. Don't explicitly call GC either - that's just setting yourself up for a bad design.
    finalize() is just a last-ditch effort to cleanup in case the user of your object didn't explicitly tell it to cleanup. If an object needs to do cleanup work when not in use, then create a method to do that. For example, I/O streams have a close() method and require that it get called, especially if the stream is attached to an actual file handle.

  • Help needed in overriding the finalize() method!

    Hi
    I need some help in overwriting the finalize() method.
    I have a program, but at certain points, i would like to "kill" a particular object.
    I figured that the only way to do that is to make that object's class override the finalize method, and call it when i need to kill the object.
    Once that is done, i would call the garbage collector gc() to hopefully dispose of it.
    Please assist me?
    Thanks
    Regards

    To, as you put it, kill an object, just null it. This
    will be an indication for the garbage collector to
    collect the object. In the finalizer, you marely null
    all fields in the class. Like this:
    public class DummyClass
    String string = "This is a string";
    Object object = new Boolean(true);
    public void finalize() throws Throwable
    super.finalize();
    string = null;
    object = null;
    public static void main(String[] args)
    //Create a new object, i.e allocate an
    te an instance.
    DummyClass cls = new DummyClass();
    //Null the reference
    cls = null;
    This is a pointless exercise. If an object is being finalized, then all the references it contains are about to cease being relevant anyway, so there's no purpose to be served in setting them to null.
    All that clearing a reference to an object does is to clear the reference. Whether the object is subsequently finalized depends on whether the object has become unreachable.
    Directly calling finalize is permitted, but doesn't usually serve any purpose. In particular, it does not cause the object to be released. Further, calling the finalize method does not consitute finalization of the object. Finalization occurs when the method is called as a consequence of a garbage collector action.
    If a variable contains a reference to an object (say a table), and you want a new table instead, then create a new table object, and assign its reference to the variable. Assuming that the variable was the only place that the old table's reference was stored, the old table will, sooner or later, get finalized and collected.
    Sylvia.

  • How the Pop UP window got closed on line select

    Hi All,
    at BP_ADDR component we are calling component BP_SEARCH_HELPS by cross component usage on F4,
    then we are doing bank details search, then on single line select at View BP_SEARCH_HELPS/BankKeySearchHelpResult
    then it goes to event handler method EH_ONSELECT then.
    inside this method we have code for to call window outbound plug RETURNRESULT'
    METHOD eh_onselect.
    via viewmanager:
      DATA: lr_window          TYPE REF TO cl_bsp_wd_window.
      lr_window ?= me->view_manager->get_window_controller( ).
      lr_window->call_outbound_plug( iv_outbound_plug   = 'RETURNRESULT' ).
    endmethod.
    but at Window out bound plug there is no code for cross comp Window navigation (like Fire_outbound_plug with navigation link)
    then also popup is closing and it gets navigating to BP_ADDR component, how it happenning...?
    code at window BP_SEARCH_HELPS/BankKeySearchHelpW outbound plug is
    method OP_RETURNRESULT.
    endmethod.
    there is no navigation link also defined for window BP_SEARCH_HELPS/BankKeySearchHelpW at Runtime repository.
    one more question is how the event handler method EH_ONSELECT is executed for line select (we r not define any server event for any field of table's context node), is it property of Table context node?
    Thanks,
    VjMhyd

    Hi VJ,
    I hope you are able to find the answer to your question that "how pop up is closing and navigation is done to BP_ADDR component" if not here is the answer.
    Go to your window class and search for method call_outbound_plug ( remove the filter check box ). inside that method firstly your outbound plug method RETURNRESULT will be called and then you will find another method fire_outbound_plug. inside this method there is code to navigate back and close the pop up. this code is only triggered for pop up cases and that's how navigations takes places.
      check if this is a popup rep. view
        if ME->IS_TOPLEVEL_WINDOW = ABAP_TRUE.
        We ignore the navigation for popups but save the outbound plug if given
        and tell the current popup to get closed
          data: LV_VIEW_MANAGER    type ref to LCL_VIEW_MANAGER,
                LV_APPL_CONTROLLER type ref to CL_BSP_WD_APPL_CONTROLLER.
          try.
              LV_VIEW_MANAGER ?= ME->VIEW_MANAGER.
              LV_APPL_CONTROLLER ?= LV_VIEW_MANAGER->GET_APPLICATION_CONTROLLER( ).
              LV_APPL_CONTROLLER->POPUP_MANAGER->CLOSE_POPUP( IV_OUTBOUND_PLUG ).
            catch CX_SY_MOVE_CAST_ERROR.                    "#EC NO_HANDLER
          endtry.
    I hope this clarifies your issue.
    Thanks
    Sudhir Grover

  • Java API - finalize method for XmlResults

    Hello!
    I'm wondering why in DB XML Java code we have a finalize() method which invokes delete() method whereas we are supposed to invoke delete() method manually (according to the documentation). Is it ok if delete() method is invoked twice (it happens in case GC cleans up the XmlResults object) ? Can't we get some problems because of that?
    Thanks,
    Vyacheslav

    Also you should note that Java actually makes no guarantees that the finalize() method is called, and it can frequently happen in practice that this is the case. For instance, the JVM usually doesn't bother calling finalize() on objects if it is shutting down, which can be disastrous for DB XML objects like Environment, XmlManager and XmlContainer, which need to clean up and write data to disk when they are closed. Read the [FAQ | http://www.oracle.com/technology/products/berkeley-db/faq/xml_faq.html#16] for more details.
    John

  • CommandLink in dataTable rendered method is called multiple times

    I have a dataTable in which one of the columns contains a commandLink. The commandLink has the "rendered" option bound to a backing bean method. When the page is submitted, the backing bean method gets called 8 times for each row in the table if the value returned is "true" and 3 times per row if the value returned is "false". Since the page is designed to "navigate" back to itself, I can understand it getting called more than once, but 8 times??? What's up with that?

    Because you have a bug in your code.
    If you want further help post a Short, Self Contained, Compilable and Executable, Example Program ([url http://homepage1.nifty.com/algafield/sscce.html]SSCCE) that demonstrates the problem.
    And don't forget to use [url http://forum.java.sun.com/help.jspa?sec=formatting]code formatting when posting code.

  • Transactional business method is called 4 times on failure

    Hi I'm experiencing a strange situation. does anybody have an idea what is wrong or just going on?.
    There is a stateful session bean which has a transactional business method called 'apply' to delegate insert/update requests to Toplink which will persist data in database. 'trans-attribute' is defined 'Required'. Toplink registers with the OC4J's external transaction.
    when there is an error in commiting the data apply method is called 3 more times (4 times in total).
    any idea????
    thanks
    -Erdem.

    Hi Erdem,
    This question has been discussed previously on this forum.
    [However, when I searched the forum archives to make sure, I couldn't find it -- but I _know_ I had a similar problem _and_ found the answer while monitoring this forum!]
    In any case, I think the behaviour that you are seeing is caused by the "max-tx-retries" attribute in the "orion-ejb-jar.xml" file. Here is a resource with some more details:
    http://kb.atlassian.com/content/orion/docs/deployment/orion-ejb-jar.xml.html
    You may also find relevant information at one (or more) of the following Web sites (if you haven't already looked at them):
    http://technet.oracle.com
    http://tahiti.oracle.com
    http://www.orionserver.com
    http://www.orionsupport.com
    http://www.elephantwalker.com
    Hope this helps.
    Good Luck,
    Avi.

  • How to find the number of times method being called.....

    hi,
    can any one pls tell me how to find the number of times the method being called......herez the example....
    Refrence ref = new Refrence();
    for(int i = 0;i < arr.length; i++){
    if(somecondition){
    ref.getMethod();
    here i want to know how many times the getMethod() is calling...Is there any method to do this.. i have seen StrackTraceElement class..but not sure about that....pls tell me the solution....

    can any one pls tell me how to find the number of times the method being called......
    herez the example.... http://www.catb.org/~esr/faqs/smart-questions.html#writewell
    How To Ask Questions The Smart Way
    Eric Steven Raymond
    Rick Moen
    Write in clear, grammatical, correctly-spelled language
    We've found by experience that people who are careless and sloppy writers are usually also careless and sloppy at thinking and coding (often enough to bet on, anyway). Answering questions for careless and sloppy thinkers is not rewarding; we'd rather spend our time elsewhere.
    So expressing your question clearly and well is important. If you can't be bothered to do that, we can't be bothered to pay attention. Spend the extra effort to polish your language. It doesn't have to be stiff or formal ? in fact, hacker culture values informal, slangy and humorous language used with precision. But it has to be precise; there has to be some indication that you're thinking and paying attention.
    Spell, punctuate, and capitalize correctly. Don't confuse "its" with "it's", "loose" with "lose", or "discrete" with "discreet". Don't TYPE IN ALL CAPS; this is read as shouting and considered rude. (All-smalls is only slightly less annoying, as it's difficult to read. Alan Cox can get away with it, but you can't.)
    More generally, if you write like a semi-literate b o o b you will very likely be ignored. So don't use instant-messaging shortcuts. Spelling "you" as "u" makes you look like a semi-literate b o o b to save two entire keystrokes.

  • How to call the screen in methods could u please explain

    hi,
    how to call the screen in methods could u please explain clearly with example

    HI ,
    CALL SCREEN - Call a screen
    Basic form
    CALL SCREEN scr.
    Addition:
    ... STARTING AT x1 y1 ... ENDING AT x2 y2
    Effect
    Calls the screen scr; scr is the number of a screen of the main program. You use SET SCREEN 0. or LEAVE SCREEN. to define the return from the CALL screen.
    Note
    Please consult Data Area and Modularization Unit Organization documentation as well.
    Addition
    ... STARTING AT x1 y1  ENDING AT x2 y2
    Effect
    The coordinates x1, y1 (start column and start line in the window) and x2, y2 (end column and end line in the window) define the size and position of the CALL screen ("top left - bottom right"). Besides these coordinates, you can also see the contents of the primary window, but cannot perform any action there.
    Note
    If "ENDING AT ..." is not specified, suitable values are substituted for x2 and y2, taking into account the size of the called screen.
    Exceptions
    Non-Catchable Exceptions
    Cause: No further screen level (call screen); the maximum number of nested screen levels is restricted to 50 at present.
    Runtime Error: DYNP_TOO_MANY_CALL_SCREENS
    THX

Maybe you are looking for

  • Opening PDF link through DOS start command

    Our software manager is asking if we can use a simple DOS command (embedded in a browser-like xaml interface) to open a PDF file to a hypertext link brought over from a FrameMaker source doc. I know that I can open a.pdf with DOS command "start a.pdf

  • How to view at sqlplus prompt the code of stored_procedure "mysp123"?

    Can I somehow list in SQLPlus the content (=code) of a stored procedure called "mysp123" without executing it? Peter

  • SONY DVD-RW DW-U10A not reading SOME DVDs, reads ALL CDs and other DVDs

    I have a SONY DVD-RW DW-U10A. It reads and writes all CDs, and reads commercial DVDs, like movies. HOWEVER, I am trying to install a new application (Halion Symphony Orchestra) and it won't read the Install DVD, nor will it read an old Data DVD it us

  • Backing up to CD

    Will the iBook back up a multiple cd file onto cd itself or do I need a third party app to do this? I want to back up my iPhoto library onto cd, it's already on an external drive so I want something permanent(mostly). Will the native software do this

  • Windows Vista doesn't detect Zen V P

    I'm hoping someone can help me with this problem. My laptop has Windows Vista on it, but it will not detect my Zen V Plus when I plus it in. My computer at work, which has Windows XP Professional, detects the player just fine. Thanks, Lauren