Archiwa tagu: Java

Netbeans nie aktualizuje aplikacji www

Pracując przy aplikacji webowej (napisanej w Javie) natknęłam się na problem nieaktualizowania aplikacji przez Netbeans. Proces kompilacji udawał się, jednak na serwerze nadal była stara zawartość. Z jakiegoś powodu nie udało się zaktualizować kodu.

Rozwiązaniem było ręczne usunięcie folderu web/web-inf/classes. Po usunięciu katalogu i przebudowaniu projektu Netbeans aktualizował zawartość plików.

Limity pamięci maszyny wirtualnej Javy w IntelliJ

Aby ustawić limity pamięci maszyny wirtualnej Javy dla środowiska IntelliJ, należy zmodyfikować wartości w pliku idea.exe.vmoptions.

Przykładowa ścieżka do niego: C:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.0.3\bin\idea.exe.vmoptions.

Przykładowe ustawienia pamięci:
-Xms128m
-Xmx1000m
-XX:MaxPermSize=2048m
-XX:ReservedCodeCacheSize=150m

Jeżeli przesadzi się z wartościami, IntelliJ nie uruchamia się, nie podając żadnego komunikatu.

Przekazywanie parametrów do funkcji – Java kontra C#

Parametry przekazywane do funkcji w Javie są przez wartość, co oznacza że wewnątrz funkcji operujemy na kopii obiektu. I kropka. W przypadku typów prostych faktycznie nie ma problemu:

int mainInt = 60;
System.out.println("mainInt before changes: " + mainInt);
m.changePrimitive(mainInt);
System.out.println("mainInt after changes: " + mainInt);
public void changePrimitive(int localInt){
localInt = 3;
System.out.println("localInt in function: " + localInt);
}

mainInt before changes: 60
localInt in function: 3
mainInt after changes: 60

W przypadku typów obiektowych (referencyjnych) również kopiowany jest obiekt, lecz w praktyce wygląda to nieco inaczej niż w przypadku typów prostych. Czytaj dalej

Java: return w try-catch-finally

Jedno z typowych zadań pojawiających się od czasu do czasu na rozmowach (lub egzaminach:)) polega na stwierdzeniu, który blok zostanie wykonany jako ostatni i jaka wartość zostanie zwrócona.

W poniższym przykładzie kolejność wypisywanych tekstów jest zgodna z numerami:

try {
  System.out.println("Try");//1
  throw new Exception();
} catch (Exception ex) {
  System.out.println("Catch");//2
} finally {
  System.out.println("Finally");//3
}
System.out.println("Function");//4

Zatem wynik to po prostu:
Try
Catch
Finally
Function

Jak natomiast zachowa się funkcja zawierająca return w każdym z bloków (try/catch/finally/ciele funkcji)? Czytaj dalej

Narzędzia

  • Błąd Java.Lang.OutOfMemoryError: PermGen Space ma związek z
    flaga MaxPermSize (trzeba zwiększyć wartość).
  • Doxygen to narzędzie do generowania dokumentacji na podstawie kodu źródłowego. Nie mylić z Doctrine, frameworkiem do baz danych w PHP 🙂
  • Gradle – skrypt służący do konfigurowania procesu budowania, releasowania, deployowania (itd.) aplikacji. Konkurent Mavena, Anta.
  • Gerrit – narzędzie do code review – można skonfigurować go tak, aby każdy commit musiał przejść code review, po którego przejściu zostanie dołączony do źródeł aplikacji.
  • Ant: Instalacja Apache Ant na Windowsie sprowadza się do ściągnięcia Anta, ustalenia nowej zmiennej systemowej ANT_HOME (np. „C:\Programy\Ant\”) oraz dodania do zmiennej Path ścieżki do jego katalogu (np. „%ANT_HOME%\bin\”). Od tego momentu jest dostępny po prostu z konsoli.
  • JSHint, Jasmine, Karma – narzędzia pomocne przy testowaniu aplikacji JavaScript.
  • npm – package manager dla serwera Node.js. Można za jego pomocą zainstalować np. Appium.
  • Lista narzędzi do modelowania UML (porównanie): http://www.objectsbydesign.com/tools/umltools_byCompany.html

Ścieżka pliku w Javie

Dostępna w Javie klasa File daje kilka możliwości uzyskania ścieżki wyznaczonego pliku. Czym różnią się poszczególne metody? Oto porównanie – dla systemu Windows.

File file = new File("C:\\Users\\XYZ\\proj.png");
try {
  System.out.println("file.getAbsolutePath() = "+file.getAbsolutePath());
  System.out.println("file.getCanonicalPath() = "+file.getCanonicalPath());
  System.out.println("file.getName() = "+file.getName());
  System.out.println("file.getParent() = "+file.getParent());
  System.out.println("file.getPath() = "+file.getPath());
  System.out.println("file.toString() = "+file.toString());
  System.out.println("file.toPath().getFileName() = "+file.toPath().getFileName());
  System.out.println("file.toPath().getFileSystem() = "+file.toPath().getFileSystem());
  System.out.println("file.toPath().getName(0) = "+file.toPath().getName(0));
}
catch (IOException e)
{
  e.printStackTrace();
}  

A oto wynik, jaki zwracają powyższe polecenia:
file.getAbsolutePath() = C:\Users\XYZ\proj.png
file.getCanonicalPath() = C:\Users\XYZ\proj.png
file.getName() = proj.png
file.getParent() = C:\Users\XYZ
file.getPath() = C:\Users\XYZ\proj.png
file.toString() = C:\Users\XYZ\proj.png
file.toPath().getFileName() = proj.png
file.toPath().getFileSystem() = sun.nio.fs.WindowsFileSystem@7471c619
file.toPath().getName(0) = Users