Diskuze: Problem se ctenim ze souboru
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 19 zpráv z 19.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
No nechal jsem si chybu vypsat prikazem
e.getLocalizedMessage()
takze problem byl ve spatnem umisteni souboru, moje chyba ze jsem si toho
nevsimnul.
Jenze ted se objevila jina chyba a to takova ze mi nejak nejede vlakno s botem
Na kontrolu chyb je skvělý Notepad++ - když stáhneš pár vychytávek.
No ono to neni chyba, proste se to vlakno nezapne a nevykona to ty veci ktery
ma.
Jinak me staci Eclipse ten me buzeruje furt
Jinak vlakno bota(klikani zatim provizorni):
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.event.InputEvent;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JOptionPane;
public class Bot extends Thread{
int width; //sirka rozliseni
int height; //vyska rozliseni
String slovo; //slovo na surf
boolean stop;
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
public Bot(){
super("MBCBot");
this.width=dim.width;
this.height=dim.height;
}
public void run(){
while(!stop){
try{
Robot robot=new Robot();
slovo=Ctecka.slovo;
robot.delay(1000);
//kliknuti na reklamu
robot.mouseMove(width-286,height-243);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(5000);
//vypnuti okna
robot.mouseMove(386,12);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
//schovani prohlizece
robot.mouseMove(1280,10);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
catch(AWTException e){
JOptionPane.showMessageDialog(null, "Vyskytla se chyba pri cinnosti bota", "Chyba bota", JOptionPane.ERROR_MESSAGE);
}
}
}
public void zapni(){
stop=false;
}
public void vypni(){
stop=true;
}
}
Uz jsem to vyresil, stacilo trochu zapremyslet, jsem ve vlaknech uz dlouho
nedelal.
Do vlakna s botem se prida
Thread.yield();
A do tridy s GUIckem do metody kde to zapinam, prepisu misto tohoto
b.join();
na
b.start();
Diky za pomoc, bez tvych pripominek bych se k tomu nedostal
No právě - tam kde se chyba projevuje nemusí být problém,...
Takze dalsi 2 chybky
1. nefunguje mi metoda na napsani slova, macka si to uplne divny klavesy
void pis(String slovo){
int pismeno;
char znak;
for(int i=0;i<slovo.length();i++){
znak=slovo.charAt(i);
Character.toUpperCase(znak);
pismeno=(int)znak;
robot.keyPress(pismeno);
robot.keyRelease(pismeno);
}
}
2. nepredava se mi slovo z vlakna
tady by to melo teoreticky predat beh dalsimu vlaknu i s tim ze v promene slovo
neco je nacteny
while((slovo=br.readLine())!=null){
slovo=br.readLine();
Thread.yield();
}
jenze tady uz to predava velky kulovi
slovo=Ctecka.slovo;
if(slovo!=null){
pis(slovo);
}
Dekuji za pripadne rady
Nechal bych si vypsat, co je v tom pismeno, ale ten kód vypadá docela dobře, funguje určitě to keyPress?
Slovo si prvně vytáhni do veřejné proměnné.
http://www.roseindia.net/…charat.shtml
Asi bude chyba ve funkci pis.
Díky, bralo to ASCII hodnotu maleho pismene, nevim proc kdyz to pismeno
zvetsuji ale nevadi, staci odecitat 32. Ted jen vyresit proc mi to nebere slova
z toho vlakna
To načítání je nějaké dost divné teda. Ve while načítáš do slovo již v podmínce a potom znovu v těle, to voláš to readLine 2x a čteš 2 řádky v jedné iteraci.
Null máš ve slovo proto, že se tam dosadí při načtení poslední řádky. Co mát ten kód dělat? Tvůj kód projede po dvou řádkách celý soubor a pak vrátí null.
Tak kdyz to dam takhle:
while((slovo=br.readLine())!=null){
Thread.yield();
tak to nacte radek do promenne, preda beh vlaknu dalsimu, to vlakno to slovo
zpracuje a zase preda beh 1. vlaknu aby precetlo dalsi radek
aspon takhle si myslim ze to funguje
Tak posledni problem vyresen, ono to ty slova precetlo driv nez to nekdo
stacil zpracovat, tak jsem tam dal uspani aby to stihlo udelat vsechny nasledne
kroky =))
Takze opet dekuji za pomoc, snad uz se zadne chyby neukáží
A jsou ta vlákna opravdu nutná? Resp. děláš něco tak výkonnostně náročného, že potřebuješ využívat více jader? Nebo potřebuješ paralelní běh dvou procesů? Mě spíše přijde, že mezi vlákny neustále komunikuješ, vlákna jsou obecně velmi problémová a sahal bych k nim až v případě, že to jinak opravdu nejde.
Nic narocneho nedelam a ani neplanuji, dekuji za radu. Ani nevim proc me ty
vlakna napadly, asi udelam mensi upravu kodu
Zobrazeno 19 zpráv z 19.