Beiträge mit tag "Quellcode

Oracle Certified Professional, Java SE 7 Programmer

2

Eine gesunde Portion Selbstbeweihräucherung ist wohl nötig, nach dem Lern-Martyrium der vergangenen Wochen: Seit Donnerstag bin ich offiziell ein von Oracle zertifizierter professioneller(!) Java-Programmierer – endlich! Die hierzu nötige zweieinhalbstündige, umgerechnet 215 Euro teure Prüfung habe ich mit sagenhaften 91% glorreich bestanden. Zum Bestehen waren 65% richtige Antworten unter den insgesamt 65 Fragen nötig. Seit geschlagenen vier Jahren schon prokrastiniere ich dieses Thema vor mir her, weil ich genau wusste, was für ein Kraftakt das werden würde. Doch nun habe ich Nägel mit objektorientierten Köpfen gemacht. Ab jetzt bin ich nachweislich ein echter Java-Profi.

Wo die Vorgängerzertifizierung zum OCAJP meist noch ganz essentielle Sprachmechanismen, Konstruktoren, Operatoren, primitive Datentypen und Objekte und ihre Relationen zueinander, Vererbungshierarchien uvm. behandelt, besteht der OCPJP schon zum größten Teil daraus, dass man die halbe Java API auswendig kennen muss. Man sollte wissen welche Klassen und Methoden es gibt, in welchen Packages sie liegen, die dazugehörigen Parameterlisten, Rückgabetypen, welche Checked Exceptions diese werfen können, und das alles zu solch umfangreichen Themengebieten wie Collections/Generics, JDBC, Threads/Concurrency, Input-/OutputStreams, File IO/NIO.2, String-Verarbeitung und diverse andere. Außerdem werden einige Basis-Entwurfsmuster, Abstraktion und professionelles Klassendesign mit allen Fallen und Schikanen thematisiert, was alleine schon Stoff für eine ganze Prüfung gewesen wäre.

Bei allem Stolz auf das tolle Ergebnis, kam es für mich doch eher unerwartet, denn die schiere Menge an Themen, die man für die Prüfung vollständig verinnerlicht haben sollte, konnte einen schon sehr leicht erschlagen. Mein Prüfungsvorbereitungsbuch umfasst knapp 800 Seiten, dazu habe ich gleich zwei offizielle Online-Trainings von Oracle mitgemacht. Insgesamt fand ich den Lernaufwand mit grob geschätzt etwa 90 Nettostunden für meine Verhältnisse bereits enorm – und das obwohl laut Buch 200 Stunden empfohlen werden. Die offiziellen Oracle-Trainings grenzen meiner Meinung nach an Betrug, so behandeln sie nur einen Bruchteil des abgefragten Wissens, und selbst das auch nur oberflächlich, und kosten dazu noch unverschämt viel Geld. Hätte ich mich direkt nach dem Online-Training gutgläubig in die Prüfung gesetzt, wäre ich chancenlos durchgefallen.

Das Buch war schon deutlich hilfreicher, aber dazu musste man den fetten Wälzer erst einmal komplett gelesen haben, was mir schwerfiel. Das Werk scheint zwar bekannt und anerkannt zu sein, jedoch ist es – besonders in der zweiten Hälfte – voller Fehler. Offenbar hatte die Autorin keine Lust mehr, oder hat die Themen selbst nur noch so halb verstanden, über die sie schreiben sollte. Jedenfalls sind nicht wenige ihrer Antworten auf ihre eigenen Übungsfragen schlichtweg falsch, die Aufgaben mitunter fahrlässig missverständlich formuliert, oder sie lässt wichtige Fakten aus den Kapiteln einfach raus, um den Leser dann gezielt bei den darauf folgenden Übungsfragen auf die Schnauze fallen zu lassen. Am Ende habe ich mich über das Buch nur noch geärgert. Trotzdem war es allemal eine passable Vorbereitungsgrundlage.

Schließlich habe ich noch vier unabhängige Mock Exams (mit Erklärungen) absolviert, und ich bin sicher, diese haben mein Prüfungsergebnis am stärksten beeinflusst. Zunächst war ich über den sehr hohen Schwierigkeitsgrad entsetzt, und gleich unter den ersten paar Fragen waren Themen, von denen ich bisher noch nie gehört hatte, wo ich eigentlich nur raten konnte. Allerdings bestätigte mir das Ergebnis am Ende doch, dass es zum Bestehen locker reichen sollte. Dadurch lernte ich, was denn so die typischen Fragestellungen sind, und konnte bei meinen falschen Antworten auch gleich sehen, wo der Fehler lag. Die eigentliche Prüfung kam mir schließlich sogar irgendwie einfacher vor als die Mock Exams – was aber auch daran liegen könnte, dass ich alle Aufgabentypen und die häufigsten Fehler schon kannte, und oft wusste, auf welche Details ich besonders achten musste.

Dummerweise habe ich mir ausgerechnet in der Prüfungswoche die für 2018 längst überfällige Herbst-Erkältung eingefangen, so dass ich, statt mich mit einer Wärmflasche ins Bett zu legen, leider mit Halsschmerzen, dröhnendem Schädel, Triefnase und Husten die Java API pauken und dann sogar die Prüfung mit Handicap ablegen musste. Hätte ich die Prüfung denn nicht kurzfristig verschieben können? Nur theoretisch. Leider war das keine praktikable Option, schon da mein Zertifizierungspfad von Oracle nach Ablauf des Jahres nicht mehr angeboten wird. Hätte ich im Dezember keinen Prüfungstermin mehr bekommen, auf Grund welcher Umstände auch immer, dann hätte ich den OCPJP nicht mehr machen können. Dann hätte ich mit dem OCA Java 8 wieder von vorne anfangen müssen. So gesehen habe ich das Zertifikat also quasi in letzter Minute erlangt.

Ich bin sehr froh, dass das Thema hiermit ein erfolgreiches Ende hat, und ich fürchte, ich kann jetzt erst einmal kein Java mehr sehen. Das war einfach zuviel des Guten. Ist ja zum Glück auch bald Weihnachten, Zeit, mich auf meinen Lorbeeren auszuruhen, und vor allem mich auszukurieren. Und so schnell folgt nun keine nächsthöhere Zertifizierung, was auch gut so ist. Obwohl … ich KÖNNTE natürlich irgendwann die Upgrade-Zertifizierung für Java 8 machen. Naja… nein. Lieber nicht.

Success Denied Symbol

Nicht so richtig Pause

0

Ich habe nicht aufgehört zu bloggen, ich mache nur nicht so richtig Pause. Fünf Wochen ist der letzte Artikel her, und die Spinnweben auf meiner Webseite sind inzwischen nicht mehr zu verbergen. Aber das macht nichts, ich bin gar nicht weg, ich warte nur lieber auf bessere Zeiten, in denen es mehr Spaß macht, über Dinge zu schreiben. Worüber soll man denn auch schreiben in diesem Jahr? In einem Jahr, in dem die Briten sich mehrheitlich dafür entschieden haben, aus der EU auszutreten. In einem Jahr, in dem 60 Millionen US-Amerikaner es offensichtlich für eine grandiose Idee hielten, Donald Trump zum Präsidenten zu machen. Und – ich sehe es schon kommen – am Ende wird Lewis Hamilton noch zum vierten Mal Formel-1-Weltmeister. Das Jahr bringt uns also wahrlich schon genug Elend, da muss ich nicht noch meinen überflüssigen Beitrag dazu leisten.

Noch Anfang Juli ging mein letzter Dauerhusten in die mittlerweile siebte Woche, ohne auch nur das geringste Zeichen von Besserung zu zeigen. Ohne jetzt noch religiös zu werden, bin ich der griechischen Göttin Antibiotika dennoch äußerst dankbar dafür, dass sie mich aus dem endlosen Siechtum befreit hat. Ärzte scheinen also doch nicht alle gänzlich unfähig zu sein. Die siebenwöchige Zeit des körperlichen Verfalls hat sichtbare Spuren hinterlassen, die mich veranlasst haben, seit meiner langersehnten Genesung wieder mehr Sport zu treiben. Und das will etwas heißen, denn was Sport angeht, war ich schon immer ein ziemlich fauler Hund. Der einzige Sport, der mir je so etwas ähnliches wie Spaß gemacht hat, war der Kraftsport. Wie es überhaupt dazu kam, ist mir bis heute ein großes Rätsel. So verbringe ich nun meine spärliche Zeit nach Feierabend mit meiner täglichen Fitness-Routine, danach 45 Minuten Auspowern auf dem Ergometer, und dann kann ich auch schon wieder zufrieden ins Bett fallen, voller Vorfreude auf den nächsten langen Tag im Büro.

Es ist zwar wirklich nicht so, dass mir der Erfolg dabei Recht geben würde, aber man wird ja auch nicht jünger, und mangelnder Erfolg ist schließlich auch das ganze Motto meiner Webseite. Insofern ziehe ich mein Programm durch solange ich es noch kann. Die nächste Erkältung wartet schon hinter der Ecke, und dann wird es mich sehr ärgern, dass ich wieder nichts tun kann, und der ganze Fortschritt innerhalb von Tagen verpufft.

Wie sieht es mit dem Spacola-Remake aus? Kurzgesagt: Mäßig, wie schon seit Jahren. Ich gestehe, dass ich den Quelltext jetzt seit Wochen nicht mehr angerührt habe. Das Projekt ist absolut nicht tot, genauso wenig wie meine Webseite. Ich habe zuletzt einige tiefgreifende Änderungen an der Struktur des Quellcodes durchgeführt, und dann ist mir aufgefallen, dass ich da einen groben Denkfehler hatte, dass das so gar nicht funktionieren kann. Schließlich habe ich aus der Frustration über meine eigene Doofheit das Projekt erst einmal beiseite gelegt, bis mir die Inspiration wieder zufliegt. Das kann jeden Tag passieren, soviel ist sicher. Erst kürzlich war ich beinahe wieder soweit, doch quasi in letzter Sekunde fiel mir ein Film ein, den ich unbedingt noch sehen wollte. Schade.

Also ohne Quatsch, dieses Jahr nehme ich die Arbeit daran auf jeden Fall wieder auf. Ich würde mich ja selbst unendlich hassen, wenn mir so kurz vor dem Ziel die Puste ausginge, dafür habe ich viel zu viel Zeit schon investiert. Und ich werde wieder mehr Beiträge schreiben. Allerallerspätestens zu Weihnachten, wenn ich wieder mehr Freizeit habe, und nicht sofort weiß wohin damit.

SPACOLA Eclipse WIP 0.45

0

spacolaeclipse045

Wo ich gerade schon bei Spielen mit der Grafik noch aus der Zeit der Weimarer Republik bin, spreche ich am besten direkt das nächste passende Thema an: Spiele mit Grafik aus der Steinzeit. Es folgt ein diesmal etwas längerer Artikel über den aktuellen Entwicklungsfortschritt meines Hobby-Dongleware-Remake-Projekts SPACOLA Eclipse. Es gibt viel zu berichten, weil ich in letzter Zeit viel daran gearbeitet habe. Die neueste Work-in-progress-Version vom Juni 2015 führt einige neue Gameplay-Features ein, allerdings auch viele tolle Neuerungen unter der Haube, die das Arbeiten an dem Projekt endlich deutlich interessanter machen, was wohl auch der Grund für meinen unerwarteten Eifer ist.

Mehrspieler-Modus

Ich habe in letzter Zeit die Serialisierbarkeit der meisten Spielobjekte überarbeitet und damit angefangen, den Mehrspieler-Modus zumindest grundsätzlich mit Leben zu füllen. Nachdem man bislang den Server lediglich vorbereiten, und sich als Client nur theoretisch registrieren lassen konnte, startet nun in der neuen Version tatsächlich ein Spiel, sobald die Mindestanzahl der Teilnehmer erreicht ist. Als nächsten Schritt sorgte ich dafür, dass die Spieler-Objekte untereinander ausgetauscht und dargestellt werden können. Die Mitspieler werden sich jetzt zwar auf dem Bildschirm gegenseitig sehen, aber davon abgesehen wird noch nichts synchronisiert, jeder spielt ein völlig eigenständiges Spiel. Mein Ziel war damit bereits erreicht, denn es ging mir vorerst um das Programmgebilde außenrum. Als nächstes wäre eine Lobby nötig, damit man einen Spielmodus und das Level auswählen, sich absprechen, und die Teilnehmerzahl festlegen kann.

Aktives Rendern, höhere Auflösungen, Vollbildmodus

Es war eine kleine und interessante Herausforderung, als ich damals mein eigenes Double-Buffering schrieb für das Zeichnen von 50 Bildern pro Sekunde ins Fenster, aber wenn ich ehrlich bin, war das eine rein autodidaktische Mission und überhaupt nicht nötig. Double-Buffering gehört zur Standardausstattung von Swing. Für meine Verhältnisse war meine Methode lange Zeit absolut ausreichend, aber für höhere Auflösungen leider unbrauchbar langsam. Inzwischen habe ich die 2D-Grafikengine von SPACOLA Eclipse auf aktives Rendern umgestellt, das den ausbremsenden Swing-Overhead umgeht und das Zeichnen des Fensters selbst steuert. Der Unterschied in der Performance ist beeindruckend. Als Bonus habe ich Echtzeit-Skalierung eingebaut, die das Bild stufenlos vergrößert, sogar mit Interpolation. Inzwischen läuft SPACOLA Eclipse in 1280×800 Pixeln, und das absolut ruckelfrei und noch dazu viel responsiver was die Mauseingaben angeht. Ach stimmt, einen exklusiven Vollbildmodus gibt es jetzt auch, den man wahlweise ganz normal mit ALT+Enter oder F8 umschaltet. Die Menüleiste ist mit dem Vollbildmodus noch nicht so ganz einverstanden, aber daran arbeite ich noch.

Farbsprites

Die ersten Vorbereitungen für den Farbmodus sind endlich getroffen. Meinen ganzen alten Monochrom-only-Code habe ich durch pseudomonochrome Grafikobjekte ersetzt, die zur Farbdarstellung in der Lage sind. Ein erster Test mit ins Spiel eingebauten Farbsprites verlief erfolgreich, der Rest ist also nur noch eine Sache von wochenlanger Kolorierung in Fleißarbeit und Search & Replace. Angefangen habe ich damit bereits teilweise. Außerdem gelang es mir, die ersten Farbsprites, die von Meinolf Amekudzi im Jahr 1993 für eine nie in Entwicklung gegangene SPACOLA-Farbversion angefertigt wurden, endlich richtig auszulesen. Die Grafiken sehen wirklich sehr spannend aus. Es müsste mir also möglich sein, diese Designs bald zu komplettieren, und einen Farbmodus ins Remake einzubauen.

Neue Gegner-KI

Die alte provisorische Gegner-KI ist bald Geschichte. Bislang war das Flugverhalten der Dummy-Gegner doch sehr merkwürdig, da sie im Weltraum Haken schlagen konnten und auch nur endlos dem Spieler folgten. Längst gelang es mir, das Flugverhalten deutlich realistischer zu machen. So müssen die Gegner jetzt genau wie der Spieler genügend Gegenschub liefern, damit sie ihre Richtung anpassen können. Endlich driften die kleinen Piratenschiffe halbwegs glaubwürdig über das Pixelbild, verfehlen auch mal das Ziel, und müssen dann ständig wieder den Kurs korrigieren. Darüber hinaus machen die Piraten zum ersten Mal das, was sie eigentlich sollten: Sie knöpfen dem Spieler seine Waren ab oder suchen freischwebende Waren, und fliegen damit zur feindlichen Station, um sie unter Gelächter dort abzugeben. Das klappt wirklich erstaunlich gut, ist nur leider noch nicht so ganz am Original dran. Und wenn die Gegner mal gut gelaunt sind, dann fliegen sie schiffbrüchigen Kameraden hinterher und retten diese.

Rettungskapseln, neue Powerups

Es gibt im Original Gegnerschiffe, die bei ihrem Abschuss mehrere Rettungskapseln freigeben. Diese öffnen sich dann wiederum in ausreichendem Abstand zum Spieler von selbst und geben die üblichen hilferufenden kleinen Männchen frei. Die Rettungskapseln sind jetzt auch im Remake enthalten. Bei den Powerups sind immerhin eineinhalb dazu gekommen: Der Molekularduplikator, der soweit ich es erkennen kann in genau einem von 64 Levels vorkommt, funktioniert jetzt perfekt. Beim Raketen-Powerup habe ich immerhin das Einladen mal fertiggestellt. Das Abfeuern derselben fehlt noch.

Der Quellcode umfasst jetzt mehr als 24.000 Zeilen und wurde von mir in den vergangenen Wochen ausgiebig gepflegt und verbessert. Einige verschluckte Exceptions beim Soundplayer habe ich so aufgespürt, was sich vermutlich auch auf die Performance ausgewirkt hat. Das Logging habe ich deutlich erweitert und auch hier einige Fehler behoben, die mir vorher nie aufgefallen waren. Insgesamt ist das Projekt spürbar aufgeräumter und ausgereifter geworden, so dass die faulen Phasen hoffentlich der Vergangenheit angehören dürften. Inzwischen ergibt selbst ein richtiges Optionsmenü Sinn, in dem man Grafikmodus und Audiotreiber und diverse andere Technikaspekte einstellen könnte. Das nächste große Thema ist ein funktionierender Kampagnenmodus mit wechselnden Levelkonfigurationen. Das Ding habe ich jetzt lange genug vor mir hergeschoben.

Oracle Certified Associate, Java SE 7 Programmer

14

ocajpKönnen Klassen in Java „protected“ oder sogar „private“ sein? Welchen Case springt ein Switch mit einem null-String an? Ist ein statischer Konstruktor ein Konstruktor mit „static“-Modifier? Werden Methoden oder Variablen dynamisch oder statisch gebunden? Können Interfaces von mehreren anderen Interfaces erben? Kompiliert eine Klasse mit der Methode „private static void main“ und ist diese startfähig? Wer solche Details nicht weiß, braucht sich über das Thema Zertifizierung noch keine Gedanken machen. Ich mache mir bereits seit Monaten Gedanken.

Seit Anfang der Woche bin ich offiziell ein von Oracle zertifizierter Java-Programmierer – endlich! Die hierzu nötige Prüfung habe ich mit 85% bestanden. Zum Bestehen brauchte man 63% der richtigen Antworten, dieser Wert variiert je nach Schwierigkeitsgrad des Aufgabenkatalogs. In meinem Fall handelte es sich um ziemlich schwere Aufgaben. Zum Vergleich: Nur wenige Jahre zuvor waren zum Bestehen stolze 77% nötig, die Aufgaben also wesentlich einfacher. Zweieinhalb Stunden hat man Zeit, sich beinahe 90 hirnverknotende Codebeispiele durchzulesen, im Kopf zu interpretieren und dann via Multiple-Choice die richtige Antwort anzuklicken – weniger als zwei Minuten pro Aufgabe. Ansatzpunkte gibt es natürlich keine. Ein paar kümmerliche Alibi-Wissensfragen zwischen den endlosen Zeilen voller Quellcode sollen wohl beruhigend wirken. Am Ende hat mir die Zeit gerade so gereicht.

Die fast 200 Euro teure Zertifizierung (Schulungsmaßnahmen nicht eingerechnet) zum sogenannten „Oracle Certified Associate, Java SE 7 Programmer“ (kurz OCAJP) ist die erste, die man als Java-Programmierer absolvieren kann, sie ist mittlerweile Voraussetzung für sämtliche weiteren. Jetzt habe ich die Möglichkeit, mich irgendwann sogar als professioneller Java-Programmierer (OCPJP) zertifizieren zu lassen, was ich definitiv plane, aber bis dahin wartet noch sehr viel mehr an Vorbereitung und Training auf mich. Das gedruckte Zertifikat sollte in den nächsten sieben Wochen bei mir eintreffen, bis dahin kann ich mich an der PDF-Version ergötzen.

Wer sich mit dem Thema noch nie befasst hat, aber neugierig auf die Prüfung ist, sollte gewarnt sein. Die Fragen sind wirklich knallhart. Es wird nie nach den allgemeinen Dingen gefragt, die jeder Java-Programmierer beantworten kann. Es werden gezielt die Schwachstellen abgeklopft, all jene Aspekte und Grenzfälle abgeprüft, die viele eben nicht kennen. Die Prüfung spekuliert darauf, dass viele etwa den einfachen Unterschied zwischen String s = „Hallo“; und String s = new String(„Hallo“); nicht kennen, und fragt dann gerne ganz genau nach, wieviele Objekte der Garbage Collector der JVM aufräumen darf.

Ich bin voller Stolz, diese Hürde erfolgreich genommen zu haben. Der OCAJP war der nächste große Schritt, mich im Bereich Softwareentwicklung bzw. Java-Programmierung zu beweisen und zu etablieren. So ein Zertifikat kann eines Tages den Unterschied zwischen Arbeitslosengeld und Gehalt ausmachen. Oder zwischen Gehalt und Gehalt++. Das muss sich alles noch herausstellen. Bis dahin werde ich weiterhin Erfahrung sammeln und Bücher wälzen.

Kleines Quellcode-Gruselkabinett

0

In meinem Beruf komme ich sehr oft mit den Quelltexten vieler Kollegen in Kontakt, deren Programmierwerke ich lesen, verstehen und erweitern können muss. Man gewöhnt sich daran, dass jeder irgendwo seinen eigenen Stil hat, und dass eben jener manchmal besser und manchmal schlechter lesbar ist. Auch ich habe schon Code geschrieben, auf den ich nicht stolz bin, aber man lernt ja schließlich aus Fehlern. Umso amüsanter ist es, wenn man als erfahrener Entwickler hin und wieder zu lesen bekommt, was sich ein blutiger Anfänger so aus seinen Hirnwindungen drückt.

So geschehen vor einigen Monaten, als ein unerfahrener Praktikant (nennen wir ihn im Folgenden einfach „Praktikant“) eine unbedeutende Erweiterung für ein Softwareprojekt schreiben sollte, für das ich teilweise die Verantwortung trage. Ich gehe zwar nicht näher auf die Details der Implementierung ein, aber ich habe drei kleine kuriose Codeschnipsel gesammelt, die mir in seinem Quellcode so aufgefallen sind. Das ist übrigens derselbe Praktikant, der (um mir einen Screenshot zu zeigen) eine Bilddatei in ein leeres Microsoft Word-Dokument eingefügt hat, damit er das Dokument als PDF-Datei exportieren konnte, um es mir dann per E-Mail zu schicken.

Achtung, der folgende Beitrag könnte für Nicht-Programmierer äußerst uninteressant sein.

Fangen wir mit etwas Leichtem an. Die obige, mehrfach verschachtelte Collection beweist zwar, dass der Praktikant einen sicheren Umgang mit Collections haben muss, aber diese einzeilige Ausgeburt der Hölle beweist leider auch, dass er nicht weiß, dass man im Idealfall gegen Schnittstellen programmiert, und dass er es wohl gern übertreibt. Was auch immer in diesem „Ding“ gespeichert wird, es klingt jedenfalls nicht gesund.

Diese Zeile bekommt Sonderpunkte, weil ich darüber erst einen Augenblick nachdenken musste. Mal davon abgesehen, dass der Praktikant sich hier weder an die Namenskonvention für Boolean-Variablen hält, noch verstanden hat, dass eine Boolean-Variable bereits die Antwort auf die Frage ist, bestaunte ich die kreative logische Verknüpfung. Während ich mich ungläubig fragte, ob der Compiler einen „umgedrehten Ungleich-Operator“ wirklich durchgehen lässt, fiel mir dann doch auf, dass das eigentlich eine Zuweisung ist, wobei dem zugewiesenen Wert (false) ein NOT vorangestellt wird (also true). Dieser „Vergleich“ ergibt immer true, der IF-Block wird immer ausgeführt. Dieses Codekonstrukt ist absoluter Käse. Vielleicht wollte uns der Praktikant aber auch nur ein wenig erheitern.

Das ist der Gewinner in der Kategorie „Kreativster Schundcode“. Drei Dinge sind absolut bemerkenswert: Zunächst testet man immer mit dem Gleichheitsoperator (==) auf null, definitiv nicht mit equals. Außerdem testet man normalerweise deshalb auf null, weil man eine NullPointerException vermeiden möchte, während der Praktikant hier sogar noch selbst eine werfen will. Und überhaupt: Der Test auf null mit equals kann niemals funktionieren, denn wenn someObject tatsächlich null sein sollte, wird mit equals bereits implizit eine NullPointerException geworfen, wo versucht wird, explizit eine zu werfen. Für das Fazit lasse ich den von mir sehr geschätzten, leider kürzlich verstorbenen Harold Ramis als Dr. Egon Spengler zu Wort kommen: „Kurz, aber völlig sinnlos.“

Und dann war da noch dieser eine unwahrscheinliche „interne“ Fehler der Eclipse IDE, den ich wohl versehentlich verursacht habe, als ich während eines Debugging-Durchlaufs versuchte das Workbench-Fenster horizontal zu verkleinern. Die Fehlermeldung, die schon beinahe als Realsatire durchgehen könnte, lasse ich im Folgenden einfach mal für sich selbst sprechen:

internalerror_eclipse

nach oben