0

そのため、非常に大きなプロジェクトですべてのスイング コンポーネントに一意の名前を付けるタスクがあります。そこで、すべてのコードベースを自動的に検索するプログラムを作成し、swing コンポーネントを初期化するたびに適切に名前を付けました。この静的メソッドからインスタンス番号を取得します。

public static int getInstanceNumber(Object instance) {
    if (instancesMap.get(instance.getClass()) != null) {
        List<Object> instances = instancesMap.get(instance.getClass());
        if (!instances.contains(instance)) {
            instances.add(instance);
            return instancesMap.get(instance.getClass()).size();
        } else {
            return instances.indexOf(instance) + 1;
        }
    } else {
        ArrayList<Object> instances = new ArrayList<Object>();
        instances.add(instance);
        instancesMap.put(instance.getClass(), instances);
        return instancesMap.get(instance.getClass()).size();
    }
}

そして、私は some_component.setName(className+getInstanceNumber(this)/variable_name); のように使用します。

それは仕事を成し遂げます、私の問題は、この命名が実行全体で一貫している必要があることです。スレッド化が邪魔にならないようにするために何を確認する必要がありますか、または異なる実行で異なる名前付けの問題が発生しないように別の方法でアプローチするにはどうすればよいですか (アプリケーションで同じパスを移動すると仮定します)。 .

スキッシュの自動テストにはこれらの名前が必要なので、同じテストを実行するたびに、まったく同じスイングコンポーネントに同じ名前が必要です/

4

1 に答える 1

1

これを完全に作り直す必要があります。このセットアップでは、スレッド化はあなたを混乱させますが、誰かがコードを変更した場合、このメソッドを呼び出した後にすべての番号が付け直されます。

クラスの名前を使用して名前をハードコーディングするか、この要件の背後にある目的を調べて、代替手段があるかどうかを確認することをお勧めします。

于 2014-01-17T12:25:37.520 に答える