2013-04-11 34 views
0

有与mortageCalc应用演习在Griffon in Action书3.6.1段工作。错误的IntelliJ运行格里芬的应用程序,但它从命令提示符

环境:

  • Win 7的专业版,64位
  • IntelliJ IDEA的版本12.1
  • 格里芬-1.2.0 JDK 1.6

我有MortgageCalView

package mortgagecal 

application(title:'Mortgage Calculator', pack:true, locationByPlatform:true) 
     { 
      panel(border: emptyBorder(6)) { 
       gridLayout(rows:4, columns:2, hgap:6, vgap:6) 
       label('Principal:') 
       textField(text: bind(target:model, 'principal', 
         value:'$200,000', 
         validator: model.validatePrincipal, 
         converter: model.convertPrincipal)) 
       label('Interest Rate:') 
       textField(text: bind(target:model, 'monthlyRate', 
         value:'6.5%', 
         validator: model.validateRate, 
         converter: model.convertRate)) 
       label('Term:') 
       textField(text: bind(target:model, 'months', 
         value:'30', 
         validator: model.validateTerm, 
         converter: model.convertTerm)) 
       label('Monthly Payment (P&I):') 
       textField(editable:false, 
         text: bind(source: model, sourceProperty: 'payment', 
           sourceEvent: 'propertyChange', 
           converter: model.convertPayment)) 
      } 
     } 

MortgageCalModel

package mortgagecal 

import groovy.beans.Bindable 
import java.text.NumberFormat 
import java.text.DecimalFormat 

@Bindable 
class MortgageCalModel { 
    float principal 
    float monthlyRate 
    float months 
    float getPayment() { 
     return principal * monthlyRate/
       (1-Math.pow(1/(1+monthlyRate),months)) 
    } 
    private currencyFormat = NumberFormat.currencyInstance 
    private percentFormat = new DecimalFormat('0.00%') 
    def validatePrincipal = { 
     try { 
      float principal = currencyFormat.parse(it) 
      return principal > 0 
     } catch (Exception e) { 
      return false 
     } 
    } 
    def convertPrincipal = currencyFormat.&parse 
    def validateRate = { 
     try { 
      float rate = percentFormat.parse(it) 
      return rate > 0 && rate < 0.30 
     } catch (Exception e) { 
      return false 
     } 
    } 
    def convertRate = { 
     return percentFormat.parse(it)/12 
    } 
    def validateTerm = { 
     try { 
      def term = Float.parseFloat(it) 
      return term > 0 && term < 100 
     } catch (Exception e) { 
      return false 
     } 
    } 
    def convertTerm = { 
     return Float.parseFloat(it) * 12 
    } 
    def convertPayment = { 
     return currencyFormat.format(it) 
    } 
} 

当运行它,我看到错误:

捉住:groovy.lang.MissingMethodException:法无签名: mortgagecal.MortgageCalView.application()是适用于参数 类型:(java.util.LinkedHashMap, mortgagecal.MortgageCalView $ _run_closure1)values:[[title:Mortgage Calculator,pack:true,locationByPlatform:true],...] groovy.lang.Mi ssingMethodException:法无签名: mortgagecal.MortgageCalView.application()是适用于争论 类型:(java.util.LinkedHashMap中, mortgagecal.MortgageCalView $ _run_closure1)值:[标题:按揭 计算器,包装:真, locationByPlatform:真],...]在 mortgagecal.MortgageCalView.run(MortgageCalView.groovy:3)

但是,当我在命令提示符下运行,它工作得很好:

cd D:\work\griffon\mortgageCal> 
griffon run-app 

所以,有未便错我的IntelliJ ...

+0

如果我这样做:'格里芬创建应用程序内mortgageCalc',然后'CD mortgageCalc'那么这两个文件粘贴到模型和视图类,它工作正常,我...谢谢 – 2013-04-11 08:43:19

+0

@tim_yates。我刚刚确认,当我从命令提示符下运行它正常工作,所以我刚刚编辑我的问题。 – Askar 2013-04-11 09:16:52

+0

确保在使用IntelliJ和Griffon时调用以下命令(从命令行):griffon integrate-with --idea 此命令生成具有完全依赖关系信息的IDEA项目文件。 – aalmiray 2013-04-11 10:47:19

回答

0

解决了! 它给出错误的原因,因为我试图运行MortgageCalView.groovy。 当我运行格里芬:mortgageCal它的工作。 :)换句话说:我必须运行该项目,而不是特定的脚本。

+0

啊是的。点击默认的运行配置将调用项目本身的run-app命令。 – aalmiray 2013-04-11 12:07:09