Pergunta

Existe uma maneira para eu passar variáveis em um actionlistener, sem chamá-los como final?Eu gostaria de usar estes dois pontos dentro de algum tipo de cronometrado forma...Eu tentei Thread.sleep (), mas por algum motivo ele não malha bem com o resto do programa.Este é o formato que eu realmente gostaria de usar, mas eu estou ciente de que pode ser impossível para fazê-lo funcionar.Estou aberto a todo e qualquer conselho.Obrigado!

(Me desculpe se esta é uma pergunta estúpida, eu procurei a resposta, mas apenas não pode parecer para encontrar um.)

public void timedMain(Point current, Point wanted){
          ActionListener taskPerformer = new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  System.out.println(wanted+" "+current);}};
                  actiontimer = new Timer(delay, taskPerformer);
                  actiontimer.start();}
Foi útil?

Solução

Você pode fazer isso, o que evita declarar os parâmetros como final.

public void timedMain(Point current, Point wanted) {
      final Point c = current;
      final Point w = wanted;
      ActionListener taskPerformer = new ActionListener(){
          public void actionPerformed(ActionEvent evt){
              System.out.println(w + " " + c);}};
              actiontimer = new Timer(delay, taskPerformer);
              actiontimer.start();}

Ou você pode alterar os tipos de current e wanted de modo que eles eram mutáveis Point titulares, e tem o actionPerformed método de olhar para os valores atuais titulares.

Mas não há nenhuma maneira para declarar a classe interna para que possa ver as alterações feitas a uma variável em um delimitador escopo do método ...se é isso que você está tentando fazer.

Outras dicas

Você poderia fazer algumas coisas

  • você pode promover a ação anônimos ouvinte para um privado (estático) classe interna, e passar os argumentos para o construtor

  • pode-se definir uma função que construiu um anônimo ação do ouvinte, em vez de embutidos no código, e fazer o parâmetros para essa função final

O que há de errado com apenas marcá-los 'final', embora?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top