@Override
	public void run() {
		if (stopped || this.tokens.length == 0)
			return;
		System.out.println("executing search");
		try {
			this.cmd = getCmd(getLongest(tokens));
			String line;
			String file;
			int n = 0;
			String[] dbentry;

			p = Runtime.getRuntime().exec(cmd);
			BufferedReader input = new BufferedReader(new InputStreamReader(p
					.getInputStream()));
			while ((line = input.readLine()) != null) {
				if (stopped) {
					System.out.println("I noticed I was stopped");
					break;
				}
				dbentry = line.split("\t");
				if (dbentry.length <= ResultListModel.DB_ENTRYNR_FILE) {
					System.err.println("weird db entry " + dbentry.length
							+ ": " + line);
				} else {
					file = dbentry[ResultListModel.DB_ENTRYNR_FILE];

					if (isMatch(file, tokens)) {
						this.model.add(dbentry);
					}
					n++;
				}
			}
			System.out.println("handled " + n + " entries.");
			input.close();
			input = new BufferedReader(
					new InputStreamReader(p.getErrorStream()));
			while ((line = input.readLine()) != null) {
				System.err.println(line);
			}
			input.close();
			this.model.refreshDisplay(-1);
		} catch (Exception err) {
			err.printStackTrace();
		}
		System.out.println("search done");
	}