Labels

Wednesday, 18 September 2013

Styling FX Buttons with CSS

A number of people have asked me recently can I create this look or that look using CSS in JavaFX. Or they have said that you could never do that! So I thought I would do a little experiment and try recreating a bunch of common button styles purely using CSS. So without further ado, here is the result:


All of these are mostly created with multiple background fill layers each with a gradient. Then there is a little font tweaking and some subtle effects. So for example all you need to make a JavaFX button look like a Windows 7 button is:
#windows7-default {
    -fx-background-color:
        #3c7fb1,
        linear-gradient(#fafdfe, #e8f5fc),
        linear-gradient(#eaf6fd 0%, #d9f0fc 49%, #bee6fd 50%, #a7d9f5 100%);
    -fx-background-insets: 0,1,2;
    -fx-background-radius: 3,2,1;
    -fx-padding: 3 30 3 30;
    -fx-text-fill: black;
    -fx-font-size: 14px;
}
The first line defines the 3 background fills, first is solid color and the other two are linear gradients. The background-insets offsets the backgrounds so they do not 100% paint over each other and the second background is 1px in from the outside and the 3rd background is 2px in from the outside of the button. The background-radius us setting the corner radius’s of the 3 backgrounds getting smaller as the backgrounds move in, this makes the gap between the borders a consistent 1 pixel all the way around. Padding adds extra space around the text to make the button bigger by default. Then the last two lines set the text color and size. That is all there is too it.
I have not included styles for the pressed, over and focused states of all the buttons but they can all be easily added in a similar way. I have included a over and pressed state for the “Record Sales” button as a example.
You can download the complete Netbeans project with all the code here.
ButtonStyles.zip
Here is the CSS code of all the button styles you see above:
#green {
    -fx-background-color:
        linear-gradient(#f0ff35, #a9ff00),
        radial-gradient(center 50% -40%, radius 200%, #b8ee36 45%, #80c800 50%);
    -fx-background-radius: 6, 5;
    -fx-background-insets: 0, 1;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.4) , 5, 0.0 , 0 , 1 );
    -fx-text-fill: #395306;
}
#round-red {
    -fx-background-color: linear-gradient(#ff5400, #be1d00);
    -fx-background-radius: 30;
    -fx-background-insets: 0;
    -fx-text-fill: white;
}
#bevel-grey {
    -fx-background-color:
        linear-gradient(#f2f2f2, #d6d6d6),
        linear-gradient(#fcfcfc 0%, #d9d9d9 20%, #d6d6d6 100%),
        linear-gradient(#dddddd 0%, #f6f6f6 50%);
    -fx-background-radius: 8,7,6;
    -fx-background-insets: 0,1,2;
    -fx-text-fill: black;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
}
#glass-grey {
    -fx-background-color:
        #c3c4c4,
        linear-gradient(#d6d6d6 50%, white 100%),
        radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);
    -fx-background-radius: 30;
    -fx-background-insets: 0,1,1;
    -fx-text-fill: black;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );
}
#shiny-orange {
    -fx-background-color:
        linear-gradient(#ffd65b, #e68400),
        linear-gradient(#ffef84, #f2ba44),
        linear-gradient(#ffea6a, #efaa22),
        linear-gradient(#ffe657 0%, #f8c202 50%, #eea10b 100%),
        linear-gradient(from 0% 0% to 15% 50%, rgba(255,255,255,0.9), rgba(255,255,255,0));
    -fx-background-radius: 30;
    -fx-background-insets: 0,1,2,3,0;
    -fx-text-fill: #654b00;
    -fx-font-weight: bold;
    -fx-font-size: 14px;
    -fx-padding: 10 20 10 20;
}
#dark-blue {
    -fx-background-color:
        #090a0c,
        linear-gradient(#38424b 0%, #1f2429 20%, #191d22 100%),
        linear-gradient(#20262b, #191d22),
        radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));
    -fx-background-radius: 5,4,3,5;
    -fx-background-insets: 0,1,2,0;
    -fx-text-fill: white;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
    -fx-font-family: "Arial";
    -fx-text-fill: linear-gradient(white, #d0d0d0);
    -fx-font-size: 12px;
    -fx-padding: 10 20 10 20;
}
#dark-blue Text {
    -fx-effect: dropshadow( one-pass-box , rgba(0,0,0,0.9) , 1, 0.0 , 0 , 1 );
}
#record-sales {
    -fx-padding: 8 15 15 15;
    -fx-background-insets: 0,0 0 5 0, 0 0 6 0, 0 0 7 0;
    -fx-background-radius: 8;
    -fx-background-color:
        linear-gradient(from 0% 93% to 0% 100%, #a34313 0%, #903b12 100%),
        #9d4024,
        #d86e3a,
        radial-gradient(center 50% 50%, radius 100%, #d86e3a, #c54e2c);
    -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.75) , 4,0,0,1 );
    -fx-font-weight: bold;
    -fx-font-size: 1.1em;
}
#record-sales:hover {
    -fx-background-color:
        linear-gradient(from 0% 93% to 0% 100%, #a34313 0%, #903b12 100%),
        #9d4024,
        #d86e3a,
        radial-gradient(center 50% 50%, radius 100%, #ea7f4b, #c54e2c);
}
#record-sales:pressed {
    -fx-padding: 10 15 13 15;
    -fx-background-insets: 2 0 0 0,2 0 3 0, 2 0 4 0, 2 0 5 0;
}
#record-sales Text {
    -fx-fill: white;
    -fx-effect: dropshadow( gaussian , #a30000 , 0,0,0,2 );
}
#rich-blue {
    -fx-background-color:
        #000000,
        linear-gradient(#7ebcea, #2f4b8f),
        linear-gradient(#426ab7, #263e75),
        linear-gradient(#395cab, #223768);
    -fx-background-insets: 0,1,2,3;
    -fx-background-radius: 3,2,2,2;
    -fx-padding: 12 30 12 30;
    -fx-text-fill: white;
    -fx-font-size: 12px;
}
#rich-blue Text {
    -fx-effect: dropshadow( one-pass-box , rgba(0,0,0,0.8) , 0, 0.0 , 0 , 1);
}
#big-yellow {
    -fx-background-color:
        #ecebe9,
        rgba(0,0,0,0.05),
        linear-gradient(#dcca8a, #c7a740),
        linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%),
        linear-gradient(#f6ebbe, #e6c34d);
    -fx-background-insets: 0,9 9 8 9,9,10,11;
    -fx-background-radius: 50;
    -fx-padding: 15 30 15 30;
    -fx-font-family: "Helvetica";
    -fx-font-size: 18px;
    -fx-text-fill: #311c09;
    -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);
}
#big-yellow Text {
    -fx-effect: dropshadow( one-pass-box , rgba(255,255,255,0.5) , 0, 0.0 , 0 , 1);
}
#iphone-toolbar {
    -fx-background-color: linear-gradient(#98a8bd 0%, #8195af 25%, #6d86a4 100%);
}
#iphone {
    -fx-background-color:
        #a6b5c9,
        linear-gradient(#303842 0%, #3e5577 20%, #375074 100%),
        linear-gradient(#768aa5 0%, #849cbb 5%, #5877a2 50%, #486a9a 51%, #4a6c9b 100%);
    -fx-background-insets: 0 0 -1 0,0,1;
    -fx-background-radius: 5,5,4;
    -fx-padding: 7 30 7 30;
    -fx-text-fill: #242d35;
    -fx-font-family: "Helvetica";
    -fx-font-size: 12px;
    -fx-text-fill: white;
}
#iphone Text {
    -fx-effect: dropshadow( one-pass-box , rgba(0,0,0,0.8) , 0, 0.0 , 0 , -1 );
}
#ipad-dark-grey {
    -fx-background-color:
        linear-gradient(#686868 0%, #232723 25%, #373837 75%, #757575 100%),
        linear-gradient(#020b02, #3a3a3a),
        linear-gradient(#9d9e9d 0%, #6b6a6b 20%, #343534 80%, #242424 100%),
        linear-gradient(#8a8a8a 0%, #6b6a6b 20%, #343534 80%, #262626 100%),
        linear-gradient(#777777 0%, #606060 50%, #505250 51%, #2a2b2a 100%);
    -fx-background-insets: 0,1,4,5,6;
    -fx-background-radius: 9,8,5,4,3;
    -fx-padding: 15 30 15 30;
    -fx-font-family: "Helvetica";
    -fx-font-size: 18px;
    -fx-font-weight: bold;
    -fx-text-fill: white;
    -fx-effect: dropshadow( three-pass-box , rgba(255,255,255,0.2) , 1, 0.0 , 0 , 1);
}
#ipad-dark-grey Text {
    -fx-effect: dropshadow( one-pass-box , black , 0, 0.0 , 0 , -1 );
}
#ipad-grey {
    -fx-background-color:
        linear-gradient(#686868 0%, #232723 25%, #373837 75%, #757575 100%),
        linear-gradient(#020b02, #3a3a3a),
        linear-gradient(#b9b9b9 0%, #c2c2c2 20%, #afafaf 80%, #c8c8c8 100%),
        linear-gradient(#f5f5f5 0%, #dbdbdb 50%, #cacaca 51%, #d7d7d7 100%);
    -fx-background-insets: 0,1,4,5;
    -fx-background-radius: 9,8,5,4;
    -fx-padding: 15 30 15 30;
    -fx-font-family: "Helvetica";
    -fx-font-size: 18px;
    -fx-font-weight: bold;
    -fx-text-fill: #333333;
    -fx-effect: dropshadow( three-pass-box , rgba(255,255,255,0.2) , 1, 0.0 , 0 , 1);
}
#ipad-grey Text {
    -fx-effect: dropshadow( one-pass-box , white , 0, 0.0 , 0 , 1 );
}
#lion-default {
    -fx-background-color:
        rgba(0,0,0,0.08),
        linear-gradient(#5a61af, #51536d),
        linear-gradient(#e4fbff 0%,#cee6fb 10%, #a5d3fb 50%, #88c6fb 51%, #d5faff 100%);
    -fx-background-insets: 0 0 -1 0,0,1;
    -fx-background-radius: 5,5,4;
    -fx-padding: 3 30 3 30;
    -fx-text-fill: #242d35;
    -fx-font-size: 14px;
}
#lion {
    -fx-background-color:
        rgba(0,0,0,0.08),
        linear-gradient(#9a9a9a, #909090),
        linear-gradient(white 0%, #f3f3f3 50%, #ececec 51%, #f2f2f2 100%);
    -fx-background-insets: 0 0 -1 0,0,1;
    -fx-background-radius: 5,5,4;
    -fx-padding: 3 30 3 30;
    -fx-text-fill: #242d35;
    -fx-font-size: 14px;
}
#windows7-default {
    -fx-background-color:
        #3c7fb1,
        linear-gradient(#fafdfe, #e8f5fc),
        linear-gradient(#eaf6fd 0%, #d9f0fc 49%, #bee6fd 50%, #a7d9f5 100%);
    -fx-background-insets: 0,1,2;
    -fx-background-radius: 3,2,1;
    -fx-padding: 3 30 3 30;
    -fx-text-fill: black;
    -fx-font-size: 14px;
}
#windows7 {
    -fx-background-color:
        #707070,
        linear-gradient(#fcfcfc, #f3f3f3),
        linear-gradient(#f2f2f2 0%, #ebebeb 49%, #dddddd 50%, #cfcfcf 100%);
    -fx-background-insets: 0,1,2;
    -fx-background-radius: 3,2,1;
    -fx-padding: 3 30 3 30;
    -fx-text-fill: black;
    -fx-font-size: 14px;
}
source:  http://fxexperience.com/2011/12/styling-fx-buttons-with-css/

Monday, 16 September 2013

How to Create an Executable File from Eclipse


Exporting from Eclipse

  1. 1
    Right click your project and click "Refresh". Alternatively you can right click and hit F5 on your keyboard. This is to ensure all your code is up to date and won't conflict when trying to export.

  2. 2
    Right click your project and click "Export".

  3. 3
    Expand the "Java" folder and double click the "Runnable JAR file" option.

  4. 4
    Configure the specifications of the JAR file. The first thing you should do is select the main class (class with the main method) from the drop down menu under "Launch configuration".

    • Secondly, select the "Export destination" via the "Browse..." button or by manually typing the location.

    • Lastly, ensure the "Extract required libraries into generated JAR" radio button is selected. Do not worry about the rest of the menu. Click "Finish" when you are satisfied with your selections.


Creating an Icon

  1. 1
    Find or create an image that will look appropriate with your program as an icon. Remember, the icon is the picture the user will click on whenever they load your program, so it will be seen often! Try to pick a memorable or descriptive image. The image size must by 256x256 in order to work properly as an icon.
  2. 2
    Go to convertico.com. This is a free site that converts common image files (.png, .jpg) to a useable icon file (.ico).

  3. 3
    Either enter a URL or browse your computer’s files to locate the image you previously selected. Click the “Go” button.


Create the Executable File

  1. 1
    Download launch4j. This is a free program designed to compile all your resources into one executable file. You can download launch4j from http://sourceforge.net/projects/launch4j/files/launch4j-3/3.1.0-beta1/.

  2. 2
    In the first text field, type or select via browsing the location you want you executable file to be stored. Make sure the filename has “.exe” at the end of it!

  3. 3
    In the second text field, type or select via browsing the .jar file previously exported from Eclipse.

  4. 4
    In the fourth text field labelled “Icon:”, type or select via browsing the “.ico” file we previously converted. This is optional, and if left blank, your OS will revert to its default executable file icon.

  5. 5
    Under the “JRE” tab at the top, select the “Min JRE version” and type in “1.4.0”. This ensures that the users have a sufficient version of Java to use your program. This can be changed by you, but 1.4.0 is a safe version.

  6. 6
    Click the gear button called “Build wrapper” at the top of the screen.

  7. 7
    Give the .xml file an appropriate name and click "Save". The .xml file is standard, don't worry about it. Your executable file will now be created!

Saturday, 14 September 2013

Shutdown PC by Java Code

class Shutdown
{
public static void main(String args[]) throws Exception
{
// Create Runtime object
Runtime r=Runtime.getRuntime();

// Shutdown system
r.exec("shutdown -s");

// Restart system
r.exec("shutdown -r");

// Shutdown after specific time (here 60 seconds)
r.exec("shutdown -s -t 60");

// Restart after specific time (here 60 seconds)
r.exec("shutdown -r -t 60");

}
}

I think you're a bit happy now.Fine, you'll have to note that the maximum time that you can make your PC wait for shutdown is 10 years, if you want more than that..... nothing, simply go send a feedback to Microsoft about it, they can do if they wish to, but have a valid reason for the claim ;)

More..

r.exec("shutdown -l"); for logging off, you can also add timer for it, as usual. If you wish to abort system being shutdown then, r.exec("shutdown -a"); this prevents your system from being shutdown.

To turn off PC without warning, then r.exec("shutdown -s -p");

To hibernate a PC, then r.exec("shutdown -h"); you can also use timer for this, not only for this, for any shutdown related operation you want to perform, you can use this option.
- See more at: http://java-demos.blogspot.com/2012/10/shutdown-system-in-java.html#sthash.nEFgIvTm.dpuf

http://java-demos.blogspot.com/2012/10/shutdown-system-in-java.html


Cross Plattom

public static void shutdown() throws RuntimeException, IOException {    
String shutdownCommand; String operatingSystem = System.getProperty("os.name");
if ("Linux".equals(operatingSystem) || "Mac OS X".equals(operatingSystem)) {
shutdownCommand = "shutdown -h now"; }    
else if ("Windows".equals(operatingSystem)){     shutdownCommand = "shutdown.exe -s -t 0"; }    
else { throw new RuntimeException("Unsupported operating system."); }
Runtime.getRuntime().exec(shutdownCommand);    
System.exit(0); }

source: http://stackoverflow.com/questions/25637/shutting-down-a-computer-using-java

Wednesday, 11 September 2013

Debugging in Eclipse

3. Debugging in Eclipse

3.1. Setting Breakpoints

To set breakpoints in your source code right-click in the small left margin in your source code editor and select Toggle Breakpoint. Alternatively you can double-click on this position.

Setting a breakpoint

For example in the following screenshot we set a breakpoint on the line Counter counter = new Counter();.

Showing a defined breakpoint

3.2. Starting the Debugger

To debug your application, select a Java file which can be executed, right-click on it and select Debug As → Java Application.

Start the debugger

After you have started the application once via the context menu, you can use the created launch configuration again via the Debug button in the Eclipse toolbar.

Debug button

If you have not defined any breakpoints, this will run your program as normal. To debug the program you need to define breakpoints.
If you start the debugger, Eclipse asks you if you want to switch to the Debug perspective once a stop point is reached. Answer Yes in the corresponding dialog.


Afterwards Eclipse opens this perspective, which looks similar to the following screenshot.

Switch to perspective

3.3. Controlling the program execution

Eclipse provides buttons in the toolbar for controlling the execution of the program you are debugging. Typically it is easier to use the corresponding keys to control this execution.
You can use the F5, F6, F7 and F8 key to step through your coding. The meaning of these keys is explained in the following table.

Table 1. Debugging key bindings / shortcuts
KeyDescription
F5 Executes the currently selected line and goes to the next line in your program. If the selected line is a method call the debugger steps into the associated code.
F6 F6 steps over the call, i.e. it executes a method without stepping into it in the debugger.
F7F7 steps out to the caller of the currently executed method. This finishes the execution of the current method and returns to the caller of this method.
F8F8 tells the Eclipse debugger to resume the execution of the program code until is reaches the next breakpoint or watchpoint.


The following picture displays the buttons and their related keyboard shortcuts.

Debug Shortcuts

The call stack shows the parts of the program which are currently executed and how they relate to each other. The current stack is displayed in the Debug view .

Showing the stack view

3.4. Breakpoints view and deactivating breakpoints

The Breakpoints view allows you to delete and deactivate stop points, i.e. breakpoints and watchpoints and to modify their properties.
To deactivate a breakpoint, remove the corresponding checkbox in the Breakpoints view . To delete it you can use the corresponding buttons in the view toolbar. These options are depicted in the following screenshot.

Breakpoint view

If you want to deactivate all your breakpoints you can press the Skip all breakpoints button. If you press it again, your breakpoints are reactivated. This button is highlighted in the following screenshot.

De-activating all breakpoints

3.5. Evaluating variables in the debugger

The Variables view displays fields and local variables from the current executing stack. Please note you need to run the debugger to see the variables in this view .

Variables View

Use the drop-down menu to display static variables.

Drop-down menu for static variables

Via the drop-down menu of the Variables view you can customize the displayed columns. For example, you can show the actual type of each variable declaration. For this select Layout → Select Columns... → Type.

Showing the actual type of the variables

3.6. Changing variable assignments in the debugger

The Variables view allows you to change the values assigned to your variable at runtime. This is depicted in the following screenshot.

Changing the value of a variable

3.7. Controlling the display of the variables with Detail Formatter

By default the Variables view uses the toString() method to determine how to display the variable.
You can define a Detail Formatter in which you can use Java code to define how a variable is displayed.
For example the toString() method in the Counter class may show meaningless information, e.g. de.vogella.combug.first.Counter@587c94. To make this output more readable you can right-click on the corresponding variable and select the New Detail Formater entry from the context menu.

New Detail Formater Screenshot

Afterwards you can use a method of this class to determine the output. In this example the getResult() method of this class is used. This setup is depicted in the following screenshot.

Detailled formater example

4. Advanced Debugging

The following section shows more options you have for debugging.

4.1. Breakpoint properties

After setting a breakpoint you can select the properties of the breakpoint, via right-click → Breakpoint Properties. Via the breakpoint properties you can define a condition that restricts the activation of this breakpoint.
You can for example specify that a breakpoint should only become active after it has reached 12 or more times via the Hit Count property.
You can also create a conditional expression. The execution of the program only stops at the breakpoint, if the condition evaluates to true. This mechanism can also be used for additional logging, as the code that specifies the condition is executed every time the program execution reaches that point.
The following screenshot depicts this setting.

Breakpoint Properties


Breakpoint Properties

4.2. Watchpoint

A watchpoint is a breakpoint set on a field. The debugger will stop whenever that field is read or changed.
You can set a watchpoint by double-clicking on the left margin, next to the field declaration. In the properties of a watchpoint you can configure if the execution should stop during read access (Field Access) or during write access (Field Modification) or both.

Watchpoint

4.3. Exception breakpoints

You can set breakpoints which are triggered when exceptions in your Java source code are thrown. To define an exception breakpoint click on the Add Java Exception Breakpoint button icon in the Breakpoints view toolbar.

Exception Breakpoint

You can configure if the debugger should stop at caught or uncaught exceptions.

4.4. Method breakpoint

A method breakpoint is defined by double-clicking in the left margin of the editor next to the method header.
You can configure if you want to stop the program before entering or after leaving the method.

Method Breakpoint

4.5. Breakpoints for loading classes

A class load breakpoint stops when the class is loaded.
To set a class load breakpoint, right-click on a class in the Outline view and choose the Toggle Class Load Breakpoint option.

Toogle class load breakpoint

Alternative you can double-click in the left border of the Java editor beside the class definition.

4.6. Step Filter

You can define that certain packages should be skipped in debugging. This is for example useful if you use a framework for testing but don't want to step into the test framework classes. These packages can be configured via the Window → Preferences → Java → Debug → Step Filtering menu path.

4.7. Hit Count

For every breakpoint you can specify a hit count in its properties. The application is stopped once the breakpoint has been reached the number of times defined in the hit count.

4.8. Remote debugging

Eclipse allows you to debug applications which runs on another Java virtual machine or even on another machine.
To enable remote debugging you need to start your Java application with certain flags, as demonstrated in the following code example.

java -Xdebug -Xnoagent \ 
-Djava.compiler=NONE \ 
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 

In you Eclipse IDE you can enter the hostname and port to connect for debugging via the Run → Debug Configuration... menu.
Here you can create a new debug configuration of the Remote Java Application type. This configuration allows you to enter the hostname and port for the connection as depicted in the following screenshot.

Remote debugging

Note

Remote debugging requires that you have the source code of the application which is debugged available in your Eclipse IDE.

4.9. Drop to frame

Eclipse allows you to select any level (frame) in the call stack during debugging and set the JVM to restart from that point.
This allows you to rerun a part of your program. Be aware that variables which have been modified by code that already run will remain modified.
To use this feature, select a level in your stack and press the Drop to Frame button in the toolbar of the Debug view .

Note

Fields and external data may not be affected by the reset. For example if you write a entry to the database and afterward drop to a previous frame, this entry is still in the database.
The following screenshot depicts such a reset. If you restart your for loop, the field result is not set to its initial value and therefore the loop is not executed as without resetting the execution to a previous point.


5. Exercise: Create Project for debugging

5.1. Create Project

To practice debugging create a new Java project called de.vogella.combug.first. Also create the package de.vogella.combug.first and create the following classes.

package de.vogella.combug.first;

public class Counter {
  private int result = 0;

  public int getResult() {
    return result;
  }

  public void count() {
    for (int i = 0; i < 100; i++) {
      result += i + 1;
    }
  }
} 


package de.vogella.combug.first;

public class Main {
  
/** * @param args */
public static void main(String[] args) { Counter counter = new Counter(); counter.count(); System.out.println("We have counted " + counter.getResult()); } }

5.2. Debugging

Set a breakpoint in the Counter class. Debug your program and follow the execution of the count method.
Define a Detailed Formatter for your Counter which uses the getResult method. Debug your program again and verify that your new formatter is used.
Delete your breakpoint and add a breakpoint for class loading. Debug your program again and verify that the debugger stops when your class is loaded.

6. Thank you



Please help me to support this article:
Flattr this

7. Questions and Discussion

If you find errors in this tutorial please notify me (see the top of the page). Please note that due to the high volume of feedback I receive, I cannot answer questions to your implementation. Ensure you have read the vogella FAQ, I also don't answer questions answered in the FAQ.

8. Links and Literature

8.1. Source Code

Source Code of Examples

8.3. vogella Resources

vogella Training Android and Eclipse Training from the vogella team
Android Tutorial Introduction to Android Programming
GWT Tutorial Program in Java and compile to JavaScript and HTML
Eclipse RCP Tutorial Create native applications in Java
JUnit Tutorial Test your application
Git Tutorial Put everything you have under distributed version control system


Source : http://www.vogella.com/articles/EclipseDebugging/article.html