2016-06-22 1 views
1

J'ai donc le programme simple suivant scala:SimpleSwingApplication a créé une quantité apparemment infini de fenêtres identiques

object CViewerMainWindow extends SimpleSwingApplication { 
    var i = 0 
    def top = new MainFrame { 
     title = "Hello, World!" 
     preferredSize = new Dimension(320, 240) 
     // maximize 
     visible = true 
     contents = new Label("Here is the contents!") 
     listenTo(top) 
     reactions += { 
      case UIElementResized(source) => println(source.size) 

    } 
} 

.

object CViewer { 
    def main(args: Array[String]): Unit = { 
    val coreWindow = CViewerMainWindow 
    coreWindow.top 
    } 
} 

J'avais espéré que cela créerait une fenêtre ordinaire. Au lieu de cela, je reçois ceci:

enter image description here

Répondre

2

Vous créez une boucle infinie:

def top = new MainFrame { 
    listenTo(top) 
} 

C'est, top appelle top appelle top ... Les éléments suivants doivent travailler:

def top = new MainFrame { 
    listenTo(this) 
} 

Mais une approche meilleure et plus sûre consiste à interdire que la trame principale soit instanciée plus d'une fois:

lazy val top = new MainFrame { 
    listenTo(this) 
} 
+0

Merci, cela a beaucoup de sens. – Jones