GraphStream Users

Archives de la liste Aide

Re: Retrieving Mouse Clicks

Chronologique Discussions 
  • From: guilhelm savin <guilhelm.savin AT>
  • To: graphstream-users AT, Sebastian Bock <sebastian.bock AT>
  • Subject: Re: Retrieving Mouse Clicks
  • Date: Wed, 29 May 2013 00:58:47 +0200

I think it's a really normal behavior if you want to turn your laptop into a heater.
But well .... we agree : this is not the aim of GraphStream.

I think there is a real problem in this case. We have to discuss it with other dev but I made a draft hack of ViewerPipe with a blocking pump method.
You can find it here :

To use it, just change this line :

ViewerPipe fromViewer = viewer.newViewerPipe();

into : 

ViewerPipe fromViewer = new BlockingViewerPipe(viewer);

Your CPU load should fall to a more acceptable rate.

Thanks for reporting this behavior.
Hope this helps.


2013/5/28 Sebastian Bock <sebastian.bock AT>
Hi there

Just a question to the example from the graphstream site. In the following example a while(true)-loop is used and AFAIK the pump() method is non blocking. This results in a loop which causes a 100% CPU usage.

Is this a normal behavior? Are there any other ways to retrieve mouse clicks without 100% CPU usage?

Thank you in advance

public class Clicks implements ViewerListener {
    protected boolean loop = true;
    public static void main(String args[]) {
        new Clicks();
    public Clicks() {
        // We do as usual to display a graph. This
        // connect the graph outputs to the viewer.
        // The viewer is a sink of the graph.
        Graph graph = new SingleGraph("Clicks");
        Viewer viewer = graph.display();
        // The default action when closing the view is to quit
        // the program.
        // We connect back the viewer to the graph,
        // the graph becomes a sink for the viewer.
        // We also install us as a viewer listener to
        // intercept the graphic events.
        ViewerPipe fromViewer = viewer.newViewerPipe();
        // Then we need a loop to wait for events.
        // In this loop we will need to call the
        // pump() method to copy back events that have
        // already occurred in the viewer thread inside
        // our thread.
        while(loop) {
    public void viewClosed(String id) {
        loop = false;
    public void buttonPushed(String id) {
        System.out.println("Button pushed on node "+id);
    public void buttonReleased(String id) {
        System.out.println("Button released on node "+id);

Guilhelm Savin
PhD Student of Computer Science

Description: Binary data

Archives gérées par MHonArc 2.6.16.

Top of page