Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Bukkit] Znikające dane z List<String>


Rekomendowane odpowiedzi

Opublikowano

Dzień Dobry. Mam bardzo dziwny problem i nie mam już naprawdę pomysłu co robię źle. Wygląda to tak : przy wypisaniu sobie wszystkiego przy "przed thread" wypisuje poprawnie, lecz w tym wątku te dane poprostu znikaja tak jakby lista była pusta .. oto kod :

public static void arenaMove(String name, final List <String> team1_list, final List <String> team2_list){ 
           
            addLog("przed thread");
            addLog(team1_list.toString());
            addLog(team2_list.toString());
           
            Thread t = new Thread(new Runnable(){
               
                @Override
                public void run() {
                        try {                      
                            addLog("jest thread");
                            addLog(team1_list.toString());
                            addLog(team2_list.toString());
                            Thread.sleep(1000);
                            for(String n : team1_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref + " Przygotuj sie gra rozpocznie sie za " + ChatColor.GOLD + "5");
 
                            }
                            for(String n : team2_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref + " Przygotuj sie gra rozpocznie sie za " + ChatColor.GOLD + " 5");
                            }
                            Thread.sleep(1000);
                            for(String n : team1_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref + ChatColor.GOLD + " 4");
 
                            }
                            for(String n : team2_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref  + ChatColor.GOLD + " 4");
                            }
                            Thread.sleep(1000);
                            for(String n : team1_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref  + ChatColor.GOLD + " 3");
 
                            }
                            for(String n : team2_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref  + ChatColor.GOLD + " 3");
                            }
                            Thread.sleep(1000);
                            for(String n : team1_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref  + ChatColor.GOLD + " 2");
 
                            }
                            for(String n : team2_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref + ChatColor.GOLD + " 2");
                            }
                            Thread.sleep(1000);
                            for(String n : team1_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref  + ChatColor.GOLD + " 1");
 
                            }
                            for(String n : team2_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref  + ChatColor.GOLD + " 1");
                            }
                            Thread.sleep(1000);
                           
                            for(String n : team1_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref + ChatColor.GOLD + " Walka rozpoczeta !");
                                w8_game.remove(n);
 
                            }
                            for(String n : team2_list){
                                Bukkit.getPlayer(n).sendMessage(main.pref + ChatColor.GOLD + " Walka rozpoczeta !");
                                w8_game.remove(n);
                            }
                           
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                }});
                t.start();
             
        }

I tutaj dam jeszcze co wypisuje w konsolce:

[22:53:20 INFO]: przed thread
[22:53:20 INFO]: [rafalolxD]
[22:53:20 INFO]: [koliber1998]
[22:53:20 INFO]: jest thread
[22:53:20 INFO]: []
[22:53:20 INFO]: []
 
Opublikowano

Źle napisałem.

 

Wątek musi być final bo całość(metoda) jest final. Tutaj masz kod, u mnie wszystko działa.

import java.util.ArrayList;
import java.util.List;


public class adgh {
	
	public static void arenaMove(String name, final List <String> team1_list, final List <String> team2_list){ 
       
		System.out.println("Przed T");
		System.out.println(team1_list.toString());
		System.out.println("Pomiedzy listami");
    	System.out.println(team2_list.toString());
    	System.out.println("Koniec");
    	
       final Thread t = new Thread(new Runnable(){ //FINALNY WĄTEK
           
            @Override
            public void run() {
                                         
            	System.out.println("W T");
                    	System.out.println(team1_list);
                    	System.out.println("Pomiedzy");
                    	System.out.println(team2_list);
                    	System.out.println("Koniec");
                    	
                        try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}

         
 
            			}
              
       });
       
       t.start(); //JEGO START
}
	
	
	public static void main(String[] args) {
		List<String> a = new ArrayList<String>();
		
		List<String> b = new ArrayList<String>();
		
		a.add("BobA");
		a.add("JimmyA");
		
		b.add("BobB");
		b.add("JimmyB");
		
		arenaMove("lol", a, ; //WYWOŁANIE
	}
}

Czyli nie masz synchronizacji wątków, albo jakiś błąd.

Opublikowano

No to nie wiem. Coś z Bukkitem jest.

 

Ok, już wiem. W Bukkicie musisz dodać te Runnable do specjalnego obiektu wywołującego. Tutaj masz informacje:

 

http://bukkit.pl/threads/jak-zrobi%C4%87-automatyczn%C4%85-wiadomo%C5%9B%C4%87-co-5-sekund.9412/

 

http://wiki.bukkit.org/Scheduler_Programming

 

 

Jakoś tak to powinno być:

 

BukkitScheduler scheduler = Bukkit.getServer().getScheduler();

 

scheduler.runTask(plugin, runnable);

 

ewentualnie

 

scheduler.runTaskAsynchronously(plugin, runnable);

 

Nie wiem jaka metoda pasuje najlepiej, poczytaj, tutaj dokumentacja BukkitScheduler:

http://jd.bukkit.org/rb/apidocs/index.html?org/bukkit/scheduler/BukkitScheduler.html

 

Idź z tym na forum Minecrafta ,tak btw, tam będą wiedzieli (raczej) :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...