Поскольку вы используете C ++ 11, лямбда-выражение является хорошим и чистым решением.
class blub {
void test() {}
public:
std::thread spawn() {
return std::thread( [this] { this->test(); } );
}
};
, так как this->
может быть опущено, его можно сократить до:
std::thread( [this] { test(); } )
или просто
std::thread( [=] { test(); } )
Полагаю, у вас проблемы с тот факт, что remove()
перегружен как int
, так и Object
, а get()
принимает только int
. ]. Попробуйте удалить(toRemove.get(i).intValue())
.
remove(Object)
from AbstractCollection
выполнит поиск по списку и удалит данный объект, которого там не будет, потому что вы отправляете ему Integer
и список содержит только JCheckBox
. Вы пытаетесь вызвать remove(int)
, но поскольку вы задаете ему Integer
, вместо этого вызывается перегрузка Object. Преобразовывая Integer
в int
, вы избегаете этой проблемы
Кроме того, всегда ли можно быть уверенным, что идентификатор в toRemove всегда равен индексу? Если toRemove не находится в порядке от наибольшего к наименьшему, его не будет.
javax.swing.JCheckBox[...]?
Также попробуйте удалить элементы по значению Objects, как здесь: http://www.easywayserver.com/blog/java-remove-element-in-arraylist/