" " + e.toString());
" ", e);
  private void addHostsFromFile() {    // this may silently fail, but that's ok, cause the file is optional    String pathName = Util.getPath("hosts.txt");    if (pathName == null)      return;    java.util.List hosts = new ArrayList();    RandomAccessFile hostFile = null;    // read hosts, one per line    try {       hostFile = new RandomAccessFile(pathName, "r");            while (true) {	String ihost = hostFile.readLine(); // get their name       	if (ihost == null) {	  break;	}	ihost = ihost.trim();	// Do other checking for reasonable host names here...	if (! ihost.equals("") && ihost != null)	  hosts.add(ihost);      }      hostFile.close();    } catch (IOException e) {      if(log.isErrorEnabled()) {        log.error("Error during read/open from file: " + pathName +                            " " + e.toString());      }      return;    }     DefaultMutableTreeNode root =       (DefaultMutableTreeNode)hostTree.getModel().getRoot();    DefaultTreeModel model = (DefaultTreeModel)hostTree.getModel();    DefaultMutableTreeNode hostNode = null;    HostComponent[] hostsInExperiment = experiment.getHosts();    Vector hostNames = new Vector(hostsInExperiment.length);    for (int i = 0; i < hostsInExperiment.length; i++)       hostNames.add(hostsInExperiment[i].toString());    for (int i = 0; i < hosts.size(); i++) {      if (hostNames.contains((String)hosts.get(i)))	continue; // this host already exists in the experiment      HostComponent hostComponent = 	experiment.addHost((String)hosts.get(i));      ConsoleTreeObject cto = new ConsoleTreeObject(hostComponent);      hostNode = new DefaultMutableTreeNode(cto, true);      model.insertNodeInto(hostNode, root, root.getChildCount());    }    if (hostNode != null)      hostTree.scrollPathToVisible(new TreePath(hostNode.getPath()));  }