Groovy 在IntelliJ中运行Griffon应用程序时出错,但它可以在命令提示符下运行

Groovy 在IntelliJ中运行Griffon应用程序时出错,但它可以在命令提示符下运行,groovy,intellij-idea,griffon,Groovy,Intellij Idea,Griffon,本书第3.6.1段中有一个关于mortageCalc应用程序的练习 环境: Win 7 Pro,64位 IntelliJ IDEA第12.1版 Griffon-1.2.0 JDK 1.6 我有抵押贷款视图: package mortgagecal application(title:'Mortgage Calculator', pack:true, locationByPlatform:true) { panel(border: emptyBorde

本书第3.6.1段中有一个关于mortageCalc应用程序的练习

环境:

  • Win 7 Pro,64位
  • IntelliJ IDEA第12.1版
  • Griffon-1.2.0 JDK 1.6
我有抵押贷款视图:

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))
            }
        }
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)
    }
}
和抵押贷款模型:

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))
            }
        }
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)
    }
}
所以,我的智能有点问题…

解决了! 它给出错误的原因是因为我试图运行MortgageCalView.groovy
当我跑步时,狮鹫:mortgageCal成功了。:)换句话说:我必须运行项目,而不是特定的脚本。

如果我这样做:
griffon创建应用程序mortgageCalc
,然后
cd mortgageCalc
然后将这两个文件粘贴到模型和视图类中,对我来说效果很好…@tim_yates谢谢。我刚刚确认,当我从命令提示符运行时,它可以正常工作,所以我刚刚编辑了我的问题。在使用IntelliJ和Griffon时,请确保调用以下命令(从命令行):Griffon Integrated with--idea此命令生成具有完全依赖信息的idea项目文件。@aalmiray在本书的第51页,它说使用--intellij“你可以使用--idea或--intellij,两者都支持:-)啊,是的。单击默认运行配置将在项目本身上调用runapp命令。