• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java for Mac Einsteiger

Binary

Ontario
Registriert
27.07.08
Beiträge
340
Hallo ihr,

ich studiere Wirtschaftsinformatik im ersten Semster und soweit sind wir mit Java fertig (natürlich in unserem Rhamen).

Sinnvollerweise hat man uns GUI nicht beigebracht aber das hole ich noch selbst nach...

Nun wollte ich doch auch mal was für den Mac programmieren.

Es würde mich reichen, wenn ich "einfach" eine Anweisung über Java (da habe ich an eine jar Datei gedacht) an das Terminal weitergeben könnte.

Nun habe ich ja schon gegooglet und folgende Seite gefunden über die Developer Site http://developer.apple.com/documentation/Java/Reference/1.5.0/appledoc/api/index.html

Nur kennt Eclipse die Klasse irgendwie, weil mir wird nach dem com. angeboten, apple usw zu nehmen aber dann doch wieder nicht. Und über das Terminal die Datei zu kompilieren klappt auch nicht.

Wenn ich einfach wüsste, welche api befehle ich für sowas brauche oder generell spezifisch auf dem Mac und wie ich die zum laufen kriege, wäre mir sehr geholfen.

Vielen Dank schonmal.
 

lol

Uelzener Rambour
Registriert
26.01.07
Beiträge
366
Also ich habe noch nicht ganz verstanden, was du im zweiten Block meinst.
Du willst eine CLI-App, dann wieder mit GUI, "Anweisung über Java"?
Sortiere dich ein bischen ;)

die com.apple Pakete brauchst du nicht. Habe das gerade überflogen und die sind dazu da, entweder HFS-Dateiattribute zu manipulieren, bzw. Java Funktionalität in Binaries einzubetten.
Falls das jetzt böhmische Dörfer sind: Stell dir vor, die Shuffle-Funktion von itunes wäre in Java geschrieben, der Rest aber in Objective C. Trotzdem funktioniert der Shuffle, ohne dass du merkst, dass da eine andere Sprache/Interpreter/Laufzeitumgebung am Werk ist.

Zurück zu deinem eigentlichen anliegen.
Hierfür gibt es betriebssystemunabhängige Pakete, die im SDK mitgeliefert werden, so könntest du - je nachdem was deine App können soll - auch für Linux und Windows und und und ausliefern.
Da wären: Swing, AWT, SWT.
Lade dir am Besten mal zum Eclipse den Visual Editor herunter. - Ein plugin, dass es dir erlaubt, mittels drag'n'drop Nutzeroberflächen zu erstellen. In diesen generierten Skelettcode (den legt der Visual Editor netterweise gleich mit an) kannst du dann deine Funktionen einbauen.

Manchmal kann die Installation des VE hakelig werden und nicht rund laufen. Wenn du also schnell loslegen willst, kann ich dir Netbeans empfehlen, da kommt ein GUI-Builder gleich mit, der konfiguriere die online dein persönliches Eclipse zusammen lade das komplette Paket mit fertig installieren Plugins herunter. Das gibt es bei http://www.yoxos.com/ondemand/
 

Binary

Ontario
Registriert
27.07.08
Beiträge
340
hm, danke für denn tipp.

Eine kurze Bitte.

class Test{

// Was soll jetzt hier rein, damit ich einen Befehl einfach an das Terminal weitergeben kann?
//Ich dachte: String script = "say \"Hello from Java\"";
}

Also wenn du mir "nur" das zeigen könntest, denke ich, könnte ich erstmal mein Grundprogramm schreiben.
 

lol

Uelzener Rambour
Registriert
26.01.07
Beiträge
366
Runtime.getRuntime.exec(DEIN_BEFEHL)

Um deinen Code zu ergänzen:
class Test{
String script = "say \"Hello from Java\"";
Runtime.getRuntime.exec( script);
}

Was du oben geschrieben hast, ist nur die Definition eines Strings. Die JRE weiß ha nicht, dass da ein Konsolenbefehl steht.

Kann sein, dass du Exceptionhandling einbauen musst, hab länger keine Systemcalls benutzt und habs daher vergessen.
 

Binary

Ontario
Registriert
27.07.08
Beiträge
340
Danke!

Ist schon spät ... Habe eben verafft, dass ich einfach nur ein String angelegt habe... oh mann...

Also es klappt leider trotzdem nicht.

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Runtime.getRuntime cannot be resolved
Nun, ich weiß nicht warum, die java lang wird ja automatisch importiert und Runtime.getRuntime müsste es geben
 

lol

Uelzener Rambour
Registriert
26.01.07
Beiträge
366
So, fertig.

Wie ich schrieb, muss ggf. Exceptionhandling, also Fehlerverarbeitung eingebaut werden.
Das sieht dann so aus:

Code:
import java.io.IOException;


public class Syscall {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Runtime.getRuntime().exec("echo test");
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

Schnapp dir mal "Java ist auch eine Insel", dort das Kapitel über Exceptions. Dort wird alles gut eklärt. Auch sonst ist dieses Freeware-Buch zu empfehlen.
 

Binary

Ontario
Registriert
27.07.08
Beiträge
340
Hi,

thxs, exceptions hatten wir schon aber ich dachte ich muss die nicht unbedingt machen.
Klar gehört es zum guten stil aber ich dachte ich könnte drauf verzichten wenn ich einfach was probieren will, krieg dann halt nen java fehler aber scheinbar nicht,

Besten dank soweit.
Nur eine Frage, ich habe alles auf public und dann ne jar erzeugt, diese kann aber nicht ausgegeben werden, kriege vom terminal ein accses denied bzw. so lässt es sich auch nicht starten durch doppelklick.

Noch ne idee?
 

lol

Uelzener Rambour
Registriert
26.01.07
Beiträge
366
Zu den Exceptions:
Das ist nicht nur "guter Stil", sondern teilweise eine Notwendigkeit. Man denke da z.b. an Streams und Datenverbindungen die bei Abbruch auf mal geschlossen werden müssen.
Und wenn du eine Funktion nutzt, die Exceptions wirft (public void fct() throws Exception),
dann musst du entweder diese Fehler bearbeiten, oder an die Hierarchieebene oben drüber wieder mittels "throws Exception" weiterreichen.

Zum Problem:
- Wie hast du das jar gebaut, ist die Manifest-Datei korrekt?
- Wie sehen die dateirechte aus?