Externe libraries toevoegen

Als je in je Java applicatie gebruikt maakt van externe libraries (.jar files) en je wilt die externe jar’s mee builden in je applicatie jar, moet je het volgende doen. Je opent de build.xml en plakt de volgende onderaan (net boven </project>).

http://pastebin.com/ff407941

Ik stop me externe libraries in de lib/ map van mijn project. Eerst en vooral moet je de naam van de jarfile wijzigen. Als je gaat builden worden twee jar’s gebouwd. Namelijk één met en één zonder je externe libraries.

<jar jarfile=”dist/NotepadMetMigLayout.jar“>

Daarna ga je per externe library een zipfileset regel toevoegen.

<zipfileset src=”lib/miglayout-3.7.jar” excludes=”META-INF/*” />

Als laatste ga je zeggen welke klasse je main methode bevat.

<attribute name=”Main-Class” value=”be.khleuven.s509679.vgo.notepad.Main“/>

Dit is gedaan in Netbeans met Ant als builder.

Simple notepad applicatie

Voor me tweede opdracht voor het vak visuele gebruikersomgevingen moesten we iets maken dat WindowEventListener, JDesktopPane, JList met JDefaultModel en GridBagLayout gebruikte. In plaats van GridBagLayout mocht je ook MigLayout gebruiken. MigLayout is een layout ontwikkeld niet door Sun en werd eigenlijk aangeraden door een student die al veel Swing ervaring heeft.

Ik had eerst me notepad met GridBag gedaan maar het is zo moeilijk te begrijpen en maakte fouten tijdens runtime. Je moet ze maar eens bekijken de fouten. Ik heb zes uur zitten zoeken wat de fout is en niet gevonden. Na een halfuur had ik hetzelfde met MigLayout en het werkt correct tijdens runtime. Mensen die ook met Swing werken, kan ik vanaf nu MigLayout aanraden.

De eerste foto is hoe het er zou moeten uitzien. Bij de derde foto voeg ik iets toe aan de textarea linksonder. Hierdoor gaat die panel verbreden. Bij de tweede foto heb ik de applicatie geminimaliseerd en dan terug gemaximaliseerd. Geen scrollbalk maar hij is vergroot. GridBagLayout gebruiken is problemen zoeken.

Voor alle mensen die hopeloos zoeken naar de link van de applicatie, het staat hieronder.

Simple notepad applicatie

update

Er is nu syntax highlighting!!! Dankzij JSyntaxPane project :-).

JScrollPane bugje

Tijdens het programmeren was ik aan het werken met JScrollPane. Ik had een exception die me naar de source van de JScrollPane code leidde. Ik scrolde naar beneden en wat zie ik daar…

http://pastebin.com/f4e8b25c7

Sinds wanneer worden String objecten met de == operator vergeleken?  Woot ik heb een eerste bug in Java gevonden :-P

Damn, iemand was me voor.

/**
* This method gets called when a bound property is changed.
* @param e A <code>PropertyChangeEvent</code> object describing
* the event source and the property that has changed. Must not be null.
*
* @throws NullPointerException if the parameter is null.
* @since 1.5
*/
public void propertyChange(PropertyChangeEvent e) {
String propertyName = e.getPropertyName();
if (propertyName == “horizontalScrollBar” ||
propertyName == “verticalScrollBar”) {

if (e.getNewValue() instanceof JScrollBar) {
setScrollBarRelations((JScrollBar)e.getNewValue());
}
}
}

static members in abstracte klasses

Ik was op de trein bezig met me forum in JSP te maken. Laat me beginnen bij me ontwerp. Ik heb een abstracte klasse Bericht die ID, titel en bericht hebben als members. Een klasse Topic en Reactie die van Bericht overerven. Aangezien Topic en Reactie aparte klasses zijn moet de ID van de eerste topic starten van nummer 1 en idem dito voor Reactie. Ik zal even de code tonen van hoe ik het ongeveer eerst had.

public class abstract Bericht {

public int id;

public static int nextId = 1;

protected Bericht() { id = nextId++; }

}

public class Topic extends Bericht {

public Topic() { super(); }

}

public class Reactie extends Bericht {

public Reactie() { super(); }

}

Wanneer ik de volgende main code uitvoer…

public static void main( String [] args ) {

Topic t = new Topic();
Reactie r = new Reactie();

System.out.println(“ID van topic: ” + t.id);
System.out.println(“ID van reactie: ” + r.id);

}

… krijg ik volgende output.

ID van topic: 1
ID van reactie: 2

Nu wilde ik die ID van reactie ook gelijk aan 1. Na logisch nadenken is die statische member nextId een member van Bericht en niet één per subklasse. Nu dacht ik om die nextId te plaatsen per subklasse en in de super constructor die statische member van de subklasse op te roepen. Helaas helaas (jawel driemaal helaas) kan Java dit niet toestaan. Driemaal hoera voor PHP want sinds versie 5.3 ondersteunen zij late static binding waardoor de statisch member van de subklasse wordt aangeroepen en niet die van de super klasse.

Daarom een oproep aan Java: introduceer late static binding!

Ik heb dit nu moeten oplossen door de id eigenschap van de super klasse te plaatsen per sub klasse.

Eerste Swing applicatie

We hebben een vak Visuele gebruikersomgevingen en moeten verschillende opdrachten maken. De eerste opdracht was eens een eerste gebruikersinterface te ontwerpen. Klik op de link hieronder om hem (of zij :p) te starten.

http://tinyurl.com/yhyljge

Veel plezier :)

“ik weet het niet”

Een nieuw semester @ KHL voor ons. We hebben nu een keuzetraject gekozen waar we ons in willen specialiseren. Velen kiezen software development. Bij het vak internet programmeren vroeg de lectores ons kort voor te stellen aan iedereen. Simpelweg je naam zeggen en wat je zou willen doen binnen twee jaar. De helft antwoordde met “ik weet het niet”. Ik was één van de weinigen met hoge ambities (Project leider). Een stuk of vijf wilden game design gaan doen en nog een vijftal websites bouwen.

Ik ergerde mij aan twee zaken “game design/development”. Je zit in de verkeerde richting, je moet naar Kortrijk gaan dudes! Leer jezelf informeren als dat je “ambities” zijn. Owja de kans dat je game developer wordt is 1/10. Het tweede is “ik weet het niet”. Hoezo je weet het niet. Je zit mama’s en papa’s centjes dus te verdoen om later te denken van “en wat ga ik nu doen van werk”. Ik vraag me af hoe die mensen achter een pc kruipen. Willen die weten hoe ze een super applicatie maken of willen ze gewoon zinloos staren naar het scherm en msn’n…

We zijn twee dagen ver en ik moet al zoiets schrijven, stom hé :-)

FOSDEM 2010 verslagje

FOSDEM 2010 ligt alweer twee dagen achter ons (ons = ik, Ibrahim, Koen en Anthony). Het was een leuke dag en vooral tof om twee gezichten van sitemasters in het echt te zien. Ibrahim had ik al twee jaar terug gezien met FOSDEM 2008. Normaal ging Abbas ook aanwezig zijn maar die stuurde zijn zieke kat, hopelijk is hij nu al wat beter.

Het is FOSDEM, dus hier zijn wat nerd facts. Ik ben naar huis gekeerd met vier CD’s/DVD’s.

  • FreeBSD (werkt niet zo goed in virtualbox)
  • Appollo (een speciale uitgebrachte BSD versie…)
  • OpenSuse 11.2
  • Fedora 12

Ook zijn dergelijke lezingen bijgewoond. De enige lezing die me bijgebleven is, was die van Groovy. Was het interessant? Niet echt. Ik heb geen zin om iets te gebruiken dat voor 75% gelijkt op JavaFX en waarmee ik hetzelfde kan doen in Java 6. Het is gewoon korter en sneller programmeren but who cares, je typt gewoon iets sneller.

De andere talks waren meer over Ruby. De eerste talk lag Ibrahim te slapen en de twee Ruby talk waren ik en Ibrahim bezig met lachen. M.a.w. maak Ruby interessanter!

We zijn ook langs alle standjes geweest, waaronder we bleven staan bij OpenSuse, embedded Linux, PostGreSQL en OpenSolaris. OpenSuse is super geworden met versie 11.2. De mooiheid van KDE 4.3.x is ongelofelijk. Embedded Linux was vooral elektronica waar ze kleine printplaten voorstelden met System-on-Chip technologie. Bij PostGreSQL stonden we vooral te kijken naar de rare snuit van de olifant (waar het op leek zal ik vertellen want het was vies :p). Bij OpenSolaris kreeg ik twee boekjes die me op weg zouden helpen bij OpenSolaris. Zo vroeg ik hoe die Timeline applicatie werkte bij ZFS en lijkt me interessant voor development onder OpenSolaris. Nu Oracle baas is van Sun en dus ook van OpenSolaris vroeg ik of er veranderingen gingen komen. Het antwoord is duidelijk: nee, het is een community project.

Het was een leuke dag, jammer dat Lien er niet bij was. Speciaal voor haar en andere mensen foto’s!

FOSDEM 2010 door ik
FOSDEM 2010 door Ibrahim

Tot volgend jaar! :-)