przekazywanie zmiennej

0

witam
mam problem z przekazaniem/pobraniem zmiennej moze ktos zaradzi

public void wezorb(ORB orb_wart){
orb=orb_wart; //tutaj dostaje wartosc orb bo wywoluje to zanim wywolam to ponizej
}
public void run(){
orb = ?????? tutaj potrzebuje wartosci orbe z voida powyzej
orb.run();
}

0

Jesli orb zapisany w metodzie wezorb() jest niestatyczna skladowa klasy, to w metodzie run po prostu odwilaj sie do niej, nie potrzebujesz zadnego przypisania.

0

juz wiedze proble, rzeczywiscie tak moze zadzialac ale to co napisalem wczesniej znajduje sie w

watku
class zal extend Thread{

//tutaj to co wczesniej
}

dalej mam

public clas Agent{
public static void main (string args[]){

wczesniej takim wywolaniem przekazywalem wartosc orb do tego wezorb ale w momencie
gdy odpalam watek z tam nic nie ma dlatego nie dziala
jak moge rozwiazac przekazanie tego orb z maina do Threada ???
zal zl = new zal();
zl.wezorb(obr);

tutaj orb pobierane z argumentow
i dalej mam start watku

zal z = new zal();
z.start();

0

class zal extends Thread {
private ORG orb;
public void wezorb(ORB orb) {
this.orb = orb; // pewnie o to chodzi
}
public void run() {
//hurrrra mozna uzywac orb!
orb.start();
}
}

?

Piszesz dosc chaotycznie, ciezko zrozumiec Twoje wypowiedzi, i trzeba sie domyslac o co chodzi.

0

no to jeszcze raz to jest kod

import MonitorowanieApp.;
import org.omg.CosNaming.
;
import org.omg.CosNaming.NamingContextPackage.;
import org.omg.CORBA.
;
import org.omg.PortableServer.;
import org.omg.PortableServer.POA;
import java.io.
;
import java.util.Properties;

class MonitorowanieImpl extends MonitorowaniePOA{
private ORB orb;
public void setORB(ORB orb_val){
orb = orb_val;
//System.out.println(orb);
}
}
class zal extends Thread {
private ORB orb;

	/*	public void wezorb(ORB orb_wart){
			orb = orb_wart;
		
			System.out.println(orb);
		}*/
		public void run(){
	try{	

			System.out.println("tutaj powinno byc");
			System.out.println(orb);
			orb.run();
		}
		catch (Exception e){
			System.err.println("@@@ERRORRRRR: " +e);
			e.printStackTrace(System.out);
		}

		}
	}

class watek extends Thread {
public void run(){
//System.out.println("TNA DZIALA");
}}
public class Agent{
public static void main(String args[]){
ORB orb = ORB.init(args, null);
try{
orb = ORB.init(args, null);
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
//System.out.println(orb);
MonitorowanieImpl monitorowanieImpl = new MonitorowanieImpl();
monitorowanieImpl.setORB(orb);

			org.omg.CORBA.Object ref = rootpoa.servant_to_reference(monitorowanieImpl);
			Monitorowanie href = MonitorowanieHelper.narrow(ref);
			
			org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
			NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
				
			String name = "Monitorowanie";
			NameComponent path[] = ncRef.to_name( name );
			ncRef.rebind(path, href);		
			System.out.println("Wybierz informacje jakie chcesz pobierac z serwera");

	zal z = new zal();
	z.start();
	}catch (Exception e) { System.out.println("Blad w mainie"); }
             watek w = new watek();
             w.start();		

}
}

ta metoda wezorb nie pomoze bo w momencie kiedy odpalane jest z.start(); to nic tam nie ma,
nalepiej byloby w metodzie run odwolac sie do main i z tad pobrac orb, poniewaz wartosc orb jest ustalana dopiero w main wiec nie moge wczesniej czyli albo odwolac sie do klasy Agent run() ale tam nie zobaczy orb bo jest dopiero w main wiec trzeba by bylo jakos Agent.main no ale tak sie chyba nie da?
2 opcja to przy z.start() podac orb ale tez nie bardzo to wychodzi, jest jakies rozwiazanie tego czy po prostu tego sie nie da zrobic?

0

Tak sobie czytam wątek i się zastanawiam dlaczego nie zrobisz tego przypisania w konstruktorze, przeszkadza to w czymś?

public zal(ORB orb_wart){
super();
orb = orb_wart;
}

wtedy w main masz

zal z = new zal(orb);
z.start();

0

Ja tak czytam i uczesnicze w tym watku ale dalem sobie spokoj bo nie rozumiem problemu. Jesli jest ustawiany orb w metodzie wezorb() przed wywolaniem start, to jesli parametr orb do tej metody nie byl null, to musi to dzialac i juz. Konstruktor to w sumie dokladnie to samo, tylko zapisane w jednej linijce.

0

dzieki moskitek, poszlo, nawet nie wiesz jak bardzo mi pomogles, mozesz mi wyjasnic o co chodzi z tym konstruktorem jak dla laika? bo mam nieciekawe zadanie przed soba wiec pewnie nie raz bede jeszcze musial go uzyc. brak mi umiejetnosci w programowaniu a dostalem takie zadanie na zaliczenie ze musze siedziec po nocach i rozgryzac o co chodzi w tej javie, jeszcze raz dzieki

0

hehe konstruktor to taka funkcja która jest wywoływana automatycznie podczas tworzenia/konstrukcji obiektu. Czyli pisząc new Obiekt(), za każdym razem przydzielana jest pamięć dla obiektu, a następnie na tej pamięci wykonywana jest funkcja zwana konstruktorem . Konstruktor nosi taką samą nazwę jak obiekt. Oczywiście można je przeładowywać jak zwykłe funkcje.

Instrukcja super() służy do wywołania konstruktora klasy nadrzędnej (tej po której dziedziczysz). W tym przypadku jest to konstruktor domyślny (taki bez parametrów).

wiesz konstruktor to bardzo podstawowa wiedza z zakresu programowania :|

0

wiem wiem, ale tak to jest jak sie idzie na zajecia i bez wiekszych podstaw programowania ma sie zrobic takie projekty. a moze wiesz jak wyciagnac w corbie ip klienta ktory sie zglosil do serwera? bo to mi w dalszym etapie bedzie potrzebne i tez nie wiem jak to zrobic.

0

Problem polega na tym, że próbujesz używać wątków, a nie masz podstawowej wiedzy na temat składni Javy. Zastępowanie podręcznika jest dość trudne. Żeby uzmysłowić Ci odległość między tym co chcesz, a tym czego nie wiesz, to podam na przykładzie pewnej książki:
Dostęp do zmiennych przez referencję opisany jest na stronie 67, a wprowadzenie pojęcia wątku na str. 907. Książka ma 1200 stron...

0

Dlaczego funkcja contains w tym kodzie zwraca false?

class Record {
String address_name;
String status;
Record(String a1,String a2){
address_name=a1;
status=a2;
};
}

public class zzzz {

public static void main(String[] args) {
    ArrayList device = new ArrayList();
    device.add(new Record("a","a"));
    Record pom= new Record("a","a");
    
    System.out.println(device.contains(pom));
          
}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1