Hi,
du solltest wirklich etwas aufpassen, dass du hier nicht verschiedene Technologien durcheinander würfelst.
Das VisualStudio ist eine reine MS geschichte, es läuft nur unter Windows und bietet zwar C, C++, ASP und so weiter an, die aktuellen Versionen setzen jedoch völlig auf .Net. Zwar gibt es von Microsoft J#, was nun ja, Microsofts Verständnis von Java entspricht, aber das hat nur bedingt überhaupt etwas mit Java gemeinsam (andererseits ist auch C# nicht so leicht von Java zu unterscheiden, da wurden ja einige Ideen als eigen und neu verkauft).
Was beide (.net und Java) gemeinsam haben ist, dass ein Plattformunabhängiger Zwischencode entsteht.
Dies ist einer von drei wichtigen Wegen, die du gehen kannst. Deine .exe oder andere ausführbare Dateien (gibt mehr als Windows), sind bereits gelinkt. Vereinfacht gesagt heißt dass, das sie auf einer spezifischen Plattform laufen. Eine Plattform ist dabei gleich eine Kombination verschiedener Dinge. So können unterschiedliche CPUs sehr unterschiedliche Befehlssätze kennen und auch die Schnittstellen zum Betriebssystem unterscheiden sich (logischer Weise) sehr stark.
Diese Abhängigkeit von einer bestimmten Plattform kann man umgehen. Wenn du z.B. JavaScript nimmst, ist zwar eine sehr einfache Skriptsprache aber das ist hier egal. Wichtig ist, sie muss auf sehr unterschiedlichen Plattformen laufen. Du möchtest das ein solches Skript unter Opera 9.0 auf einer SUSE Linux Installation das gleiche tut wie unter FireFox 1.0 unter Windows 98 und Safari unter MacOS. Dabei sind dass völlig unterschiedliche Systeme. Der Entscheidende Punkt ist, es handelt sich um eine Skriptsprache. Du überträgst quasi Code, der interpretiert wird. Das ist wie eine .bat Datei unter Windows. Du könntest den Inhalt auch in den Interpreter tippen und der wertet den dann aus. Erst hier werden für den Rechner Befehle daraus gemacht. Dieses Interpretieren kostet natürlich Zeit, löst dich aber von der Plattform. Jede Plattform mit einem Interpreter kann deinen Code ausführen.
Java und .net gehen einen zwischen Weg. Hier wird nicht mehr direkt interpretiert. Es wird Objektcode erzeugt. Dieser ist an die virtuelle Plattform gebunden (es gibt auch Java-Prozessoren, die dann auch .class Dateien direkt ausführen können). In diesem Objektcode stecken schon Optimierungen drin. Dies wäre bei reinen Interpretersprachen so nicht möglich.
Der Code von Java und .net bleibt somit Plattformunabhängig. Jede Plattform mit geeigneter Virtueller Maschine könnte den Code ausführen (dass wäre bei .net allerdings nur die Windows-Plattform).
Anders als bei reinen Interpretersprachen ist der Code zwar schneller, benötigt aber eben trotzdem einen Interpreter. Dieser ist durch die jeweilige Laufzeitumgebung gegeben (hier stecken u.A. auch Bibliotheken drin).
Eine .exe, die ohne weiteres lauffähig sein soll, kann sich nicht auf eine bestimmte Umgebung verlassen. Die Bibliotheken sollten ihr mitgeliefert werden. Auch hier gibt es / gab es andere Ansätze, ein Stichwort hier ist die DLL-Hölle. Tut hier aber nichts weiter zur Sache.
Fakt ist es, dass ein Java-Programm gar keine Idee hat, warum es in eine .exe gehören sollte. Es soll ja gerade plattformunabhängig bleiben. Trotz allem ist es durchaus möglich. Du brauchst halt nur einen Compiler und Linker, der dein Java Programm an eine Plattform bindet. Dabei verlierst du dann natürlich die Unabhängigkeit. Ich denke die GCC konnten das. Musst du aber mal nach googlen, wie man das anstellen konnte.
Gruß Der Unwissende