• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

CacheWolf startet nicht unter Linux "Easy Peasy"

jrgnie

Geonewbie
Hallo zusammen,

ich habe einen kleinen EeePC auf dem Linux EasyPeasy (Ubuntu 8.10) läuft.
Nach dem Download der Dateien und dem ersten Start konnte ich ein neues Profil anlegen. Das war es dann aber auch... Jedesmal wenn ich jetzt starte (egal ob aus dem Terminal oder dem Home-Verzeichnis stürzt CW nach Auswahl meines Profils ab. Im Terminal bekommen ich folgende Meldungen:

jrgnie@jrgnie-eeepc:~$ java -jar /home/jrgnie/CacheWolf/CacheWolf.jar &
[1] 6890
jrgnie@jrgnie-eeepc:~$ java.lang.NullPointerException
at ewe.fx.Mask.bitManipulate(Mask.java)
at ewe.fx.Mask.scale(Mask.java)
at ewe.fx.mImage.scale(mImage.java)
at CacheWolf.AttributesSelector.showAttributePalette(AttributesSelector.java:109)
at CacheWolf.AttributesSelector.setSelectionMasks(AttributesSelector.java:24)
at CacheWolf.FilterScreen.<init>(FilterScreen.java:255)
at CacheWolf.MainMenu.<init>(MainMenu.java:39)
at CacheWolf.MainForm.doIt(MainForm.java:100)
at CacheWolf.MainForm.<init>(MainForm.java:38)
at CacheWolf.CacheWolf.main(CacheWolf.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at ewe.reflect.Method.invokeInThread(Method.java)
at ewe.reflect.Method.nativeInvoke(Method.java)
at ewe.reflect.Method.invoke(Method.java)
at ewe.ui.mApp$1.run(mApp.java)
at ewe.sys.Coroutine.run(Coroutine.java)
Exiting application due to exception thrown in main().

Kann mir jemand helfen?

Viele Grüße
jrgnie
 

greiol

Geoguru
als ersten schritt auf jeden fall
Code:
cd /home/jrgnie/CacheWolf/
java -jar CacheWolf.jar &
danach sehen wir weiter
 
OP
J

jrgnie

Geonewbie
Prima, das hat geklappt. Aber warum so und nicht anders?
Jetzt mal ein paar Caches laden...

Danke
 

pfeffer

Geowizard
die Frage ist: warum liefern wir nicht ein kleines Shell-Skrip mit cachewolf.sh, das cd in das Verz eigene Verz macht, CW aufruft (evtl. und danach zurück cd)?

Gruß,
Pfeffer.
 

pfeffer

Geowizard
ich kenne mich mit linux nicht so aus, aber:
ich vermute, es müsste sich ermitteln lassen, in welchem Verzeichnis die cachewolf.sh liegt. In Windows Xp geht das zB mit dem Befehl "cd %~d0%~p0". Vermutlich lautet er in Linux anders, aber ich denke, es müsste irgendwie gehen.
Ich Windows wird dem aufgerufenen Programm die vollständige Befehlszeile übergeben, wobei sein eigener Pfad vollständig enthalten ist - ich vermute, dass das in Linux ähnlich ist. Das Verzeichnis, in dem cachewolf.sh liegt, müsste sich so irgendwie ermitteln lassen. Dann einfach annehmen, dass das cachewolf-Binary im selben Verz liegt, "schon" ist das Skript fertig.

Gruß,
Pfeffer.
 
OP
J

jrgnie

Geonewbie
Auf meinem Desktop-PC mit Ubuntu 8.10 (nicht Easy Peasy) konnte ich CW problemlos mit Doppelklick auf die "CacheWolf.jar" starten. Ich habe mir dann einen Starter (bei Windows: Verknüpfung) auf den Desktop angelegt. So gehts prima.

Auf meinem Netbook (Ubuntu 8.10 Easy Peasy) klappt das so leider nicht. Hier habe ich nun folgendes Skript auf dem Desktop und starte CW damit:

"!/bin/bash
cd/home/jrgnie/CacheWolf/
java -jar "CacheWolf.jar"
exit 0

Warum sich beide Versionen unterschiedlich verhalten, ist mir jedoch ein Rätsel.
 

greiol

Geoguru
ob dein starter das cd macht, dein dateimanager oder du selber in einem skript ist letztendlich egal. es muss nur gemacht werden.
 
A

Anonymous

Guest
unter *NIX geht das relativ simpel mittels des Befehls "locate" bzw. "whereis", diese liefern den Pfad zur Anwendung zurück.
Denke damit könnte man ein sehr allgemeingültiges Script schreiben.
 

greiol

Geoguru
Albsucher schrieb:
unter *NIX geht das relativ simpel mittels des Befehls "locate" bzw. "whereis", diese liefern den Pfad zur Anwendung zurück.
Denke damit könnte man ein sehr allgemeingültiges Script schreiben.
locate benötigt ein laufendes updatedb
whereis sucht in einer reihe vorgebener pfade
which sucht nur in $PATH
alle drei sind damit untauglich für das erreichen des geplanten ziels

locate CacheWolf liefert bei mir entspannte 20007 treffer und whereis CacheWolf keinen einzigen ;)
 

greiol

Geoguru
pfeffer schrieb:
hilft nicht eine Umgebungsvariable?
$0 oder so vielleicht?
ich kenne nur ein "etwas" komplexeres konstrukt für die bash (nicht für die sh)
Code:
#!/bin/bash

[[ ${BASH_VERSINFO[0]} -le 2 ]] && echo 'ERROR: sorry, only works with bash 3.0 or better!' && exit 1
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && echo "INFO: script ${BASH_SOURCE[0]} is running sourced ..."

script_path="$(cd $(dirname "${BASH_SOURCE[0]}"); pwd -P)/$(basename "${BASH_SOURCE[0]}")"

[[ ! -f "$script_path" ]] && script_path="$(cd $(dirname "$0"); pwd -P)/$(basename "$0")"
[[ ! -f "$script_path" ]] && script_path="" && echo 'ERROR: No full path to running script found!' && exit 1

script_dir="${script_path%/*}"

cd $script_dir

# you command here
Quelle: irgendwo aus dem grossen netz

das funktioniert bei absoluter ansprache /pfad/sript, bei relativer ./script oder ../../pfad/script und wenn das script im pfad liegt
 

ColleIsarco

Geowizard
pfeffer schrieb:
hilft nicht eine Umgebungsvariable?
$0 oder so vielleicht?

Gruß,
Pfeffer.
Ungefähr so:
Code:
#!/bin/bash -f
full=`which $0`
direc=`dirname $full`
cd $direc
pwd
scheint zu funktionieren. Ich habe es jetzt nicht ausführlich getestet und bin eigentlich eher csh-User.

Gruß
Andi P
 

pfeffer

Geowizard
ich glaube, which sucht nur im Path, evtl. auch im aktuellen Dir.
greiols Lösung erscheint mir deshalb plausibler. Läuft das auch bei Dir?

Gruß,
Pfeffer.
 

ColleIsarco

Geowizard
pfeffer schrieb:
ich glaube, which sucht nur im Path, evtl. auch im aktuellen Dir.
greiols Lösung erscheint mir deshalb plausibler. Läuft das auch bei Dir?

Gruß,
Pfeffer.
Also ein Aufruf ../tmp/foo.sh hat bei mir das Verzeichnis angezeigt, in dem foo.sh auch liegt (als absoluter Pfad). Ebenso in anderen Fällen, die mir spontan einfielen. Ob das auch in super-exotischen Fällen funktioniert? :ua_nada:
 

mirabilos

Geocacher
Code:
#!/bin/sh
cd "$(dirname "$0")"
exec java -jar CacheWolf.jar ${1+"$@"}

Ist sogar portabel zu jeder POSIX-Shell.

(Die WiXP-Lösung macht btw Win2k kaputt.)

Achso: absolut 100%ig geht das nur unter Windows®, da es eine
API dafür nicht unter Unix gibt (man kann in argv[0] was anderes
reinschreiben als das zu startende Skript/Programm), aber die o.a.
Lösung greift alles ab (./skript, skript, /path/to/skript, mehrere Ver-
sionen im Pfad, usw), was man „normalerweise“ so findet.

Edit: zsh-kompatibel gemacht
 
Oben