Java Code Snippet: EnumSet

In java kann man ganz leicht Sets aus Enums erzeugen. Was die Hilfsklasse java.util.EnumSet bereitstellt kann man hier nachlesen.

Eine einfache Möglichkeit Mengen mit Enums zu bauen bietet die Klasse java.util.EnumSet. Diese Klasse bietet mehrere Methoden um Enums zu einer speziellen Implementierung eines Sets zu vereinen:

EnumSet.allOf();
EnumSet.complementOf();
EnumSet.copyOf();
EnumSet.nonOf();
EnumSet.of();
EnumSet.range();

Dabei wird stehts gewahrt, dass ein EnumSet nur von einem Typ ist der Parameter explizit oder implizit übergeben wird. Ich möchte hier noch die einzelnen Methoden überblicksmäßig erklären:

allOf – liefert ein Set zurück dass alle Ausprägungen eines Enums beinhaltet, dazu wird der Methode eine Enum Klasse übergeben

complementOf – erhält als Parameter ein EnumSet und bildet daraus ein neues EnumSet, dass all jene Enum Ausprägungen enthält die nicht im übergebenen Set beinhaltet waren.

copyOf – kopiert eine Collection oder EnumSet und erzeugt ein neues EnumSet

nonOf – erzeugt ein leeres EnumSet mit dem Typ der übergebenen Enum Klasse

of – diese Methode gibt es in verschiedenen Ausführungen was die Anzahl der zu übergebenden Enum Ausprägungen betrifft. Die wohl wichtigste ist die Variante mit dem varargs Argument, dass dem Entwickler und der entsprechenden Implementierung sämltiche Freiheiten bei der Wahl der Anzahl der Argumente lässt.

range – erzeugt ein neues EnaumSet, welches alle Ausprägungen eines Enums innerhalb des mitgebenen Start und Endwertes beinhaltet.

Genauers gibts in der API:

http://download.oracle.com/javase/6/docs/api/java/util/EnumSet.html

Happy Coding!

Ähnliche Artikel:

Java Code Snippets: HowTo resize an ImageIcon

See a code snippet showing howto resize a ImageIcon in Java without touching the original file of the image.

Hi there,

perhaps you ran into following problem too:
I had an image in the fileSystem, that i want to use in a JLabel, but it was way to big to match the offered space for the JLabel. One way to solve this is to resize the image itself. But on some reaseons if that is not possible, you have to do it within your code:

ImageIcon imageIcon = new ImageIcon("./img/imageName.png"); // load the image to a imageIcon
		Image image = imageIcon.getImage(); // transform it 
	    Image newimg = image.getScaledInstance(120, 120,  java.awt.Image.SCALE_SMOOTH); // scale it the smooth way  
	    imageIcon = new ImageIcon(newimg);  // transform it back

We used a smooth way to scale the image to get a nice looking new Image. Besides there are some other scaling algorithms offerd by java.awt.Image e.g. SCALE_FAST

Happy Coding

Ähnliche Artikel:

Kleine Java Tips: log4j Log Level im Programm ändern

Log4j ermöglicht einem während des Programmaufrufs das Log Level zu ändern, wie das geht wird in diesem Artikel aufgezeigt.

Will man dem Kunden nicht mit Logausgaben zumüllen, sich aber die Möglichkeit offen halten, dass dieser durch setzen eines zusätzlichen Parameters die Logausgaben erweitern kann, um im Problemfall aussagekräftigere Logfiles zu generieren, muss man dies zur Programmlaufzeit ändern. Mit diesen zwei kleinen Zeilen lässt sich das Log Level vom RootLogger für Apache Log4j wärend des Programmaufrufes ändern:

Level newLevel = Level.toLevel(level, Level.DEBUG);
Logger.getRootLogger().setLevel(newLevel);

Alternativ ist natürlich eine externe Konfigurationsdatei in der der Kunde den Parameter setzen kann und diesen auch ausführlich per Kommentar erklärt bekommt nie verkehrt.

Happy Coding

Ähnliche Artikel:

pfSense 2.0 virtuelle IP Adressen

In der neuesten pfSense Release (Version 2.0) gibt es endlich eine Unterstützung um virtuelle IP Adressen (VIPs) direkt in der GUI anzulegen.

Jedoch ist dies nicht ganz so einfach wie es auf den ersten Blick scheint.

Grundsätzlich ist einmal zu unterscheiden ob man eine zusätzliche WAN oder LAN IP Adresse anlegen will.

Zusätzliche WAN IP Adresse

Beispielsweise man besitzt den IP Adressbereich 203.0.113.88/29 – dann wäre die erste nutzbare IP Adresse 203.0.113.90 – nehmen wir an auf diese Adresse würde auch das WAN Interface eingestellt werden. Voraussetzung hierfür ist natürlich, dass bereits ein entsprechendes Gateway mit der IP Adresse 203.0.113.89 existiert (z.B. das Modem des Providers).

Um nun die nächste IP Adresse 203.0.113.91 für beispielsweise ein Portforwarding zu verwenden, ist es notwendig eine VIP anzulegen.

Um eine zusätzliche WAN IP Adresse anzulegen startet man im Menüpunkt Firewall-> Virtual IPs:


Hier fügt man im Reiter Virtual IPs mit dem + Symbol einen neuen Eintrag hinzu.

Wichtig hierbei ist natürlich die Auswahl des Typs IP Alias und die richtige Angabe der Subnetzmaske (/29).

Nun kann die zusätzliche IP Adresse unter Firwall -> NAT für ein Portforwarding verwendet werden:

Zusätzliche LAN IP Adresse (2tes LAN Subnetz)

Angenommen man hätte 2 LAN Subnetze:

192.168.0.0/24 = primäres Subnetz (pfSense LAN static IP=192.168.0.1)

10.1.1.0/24 = sekundäres Subnetz

Um aus dem 10er Subnetz ebenfalls Internetzugriff zu haben bzw. ein Portforwarding in das 10er Subnetz durchzuführen bedarf es nun ein wenig mehr Aufwand.

Zuerst beginnen wir wieder mit dem Zuweisen einer Virtuellen IP Adresse unter Firewall -> Virtual IPs:

Hierbei ist wieder zu beachten:

Typ: IP Alias

Interface: Natürlich LAN

Adresse: Hier wird die IP Adresse unter der die Firewall erreichbar sein soll angegeben – aber Achtung: Die Subnetzwmaske muss die Netzwerk Subnetzmaske sein (also in unserem Fall /24 = 255.255.255.0)

Mit dieser Konfiguration kommt aber pfSense bei der automatischen Erstellung der NAT Regeln nicht klar – diese müssen nun manuell unter Firewall -> NAT -> Reiter Outbound erstellt werden.

Hierbei ist der Punkt Manual Outbound NAT rule generation auszuwählen. Nach Bestätigung mit dem Button Save werden automatisch entsprechende Regeln erzeugt (unter Umständen finden sich hierbei Regeln für einzelne Hosts die dann zu löschen sind).

Damit die Regeln berücksichtigt werden, muss unter Outbound NAT die Option Manual Outbound NAT rule generation aktiviert werden!

Grundsätzlich jedoch sollte eine Regel für das primäre LAN Netz erstellt worden sein:

Interface Source Source Port Destination Destination Port NAT Address NAT Port Static Port Description
WAN 192.168.0.0/24 * * * * * NO Auto created rule for LAN to WAN

Nun ist eine manuelle Regel auf Basis der bestehenden Auto created rule durch den + Button daneben zu erstellen:

Hierbei ist zu beachten, das Source Netzwerk wieder mit der korrekten Netzwerk Maske anzugeben und für das Interface natürlich WAN auszuwählen.

Nach Bestätigen mit dem Save Button sollten sich nun 2 Outbound NAT Regeln in der Liste finden:

Damit der Internet Zugriff aus dem 10er Subnetz auch klappt muss dieses noch in den Firewall Regeln unter Firewall -> Rules -> Reiter LAN erlaubt werden. Hierzu wird basierend auf der bestehenden Regel für das (primäre) LAN net mit dem + Button daneben eine neue Regel erstellt:

Ab nun sollte der Zugriff auf das Internet aus dem 10er Subnetz klappen.

Portforwarding auf eine Virtuelle LAN IP

Ebenso ist es möglich ein Portforwarding auf einen Server (z.B. 10.1.1.100) im 10er Subnetz einzurichten.

Hierzu wird einfach eine neue Regel unter Firewall -> NAT -> Reiter Port Forward erstellt:

In diesem Beispiel wird sogar von der virtuellen WAN IP ein Portforwarding auf einen Server der sich im virtuellen LAN Subnetz befindet erstellt.

 

 

Ähnliche Artikel:

  • Noch keine vorhanden.

SDP Multimedia Fehler – Stream sichern – TTCP socket connect failed: 10061

TTCP socket connect failed: 10061 – Wie ein Stream der solch einen Fehler wirft dennoch sichern kann wird in diesem Artikel erklärt

Ich wollte unlängst einen Video Stream sichern. Bei der Nutzung des Programms SDP Multimedia (Streaming Download Project) und bin dabei auf folgenden Fehler gestoßen

TTCP socket connect failed: 10061

sobald ich auf Go geklickt habe.

Da sich die Suche nach einer Lösung dafür länger als erwartet gezogen hat, möchte ich als Hilfestellung für nach mir Suchende eine schnelle Abhilfe für diesen Blocker präsentieren:

Da scheinbar manche mms Streams nicht über den normalen mms Port (1755 siehe http://de.wikipedia.org/wiki/MMS-Protokoll ) abrufbar sind, muss man den Port über den die Daten abgeholt werden umstellen auf zB den HTTP Port 80. Dies kann in SDP Multimedia über Setup –> Setup Options –> Reiter: Protocol abgeändert werden. Einfach den Radio Button bei HTTP aktivieren anstatt TCP und los gehts.

SDP setup

Happy Streaming äh… Streamdownloading :D

Ähnliche Artikel: