Kompilacja java

0

Mam pliki mojego programu :

katalog 1

  • plik1.java
  • katalog 2
    • plik2.java

gdzie w pliku "plik2.java" mam

Kopiuj
import plik1;

dostaję błędy kompilacji:

plik1.java:3: ';' expected
import plik2;

jak poprawnie zaimportować ten plik? nie mogę inaczej zorganizować plików programu

MA
Chyba Ci gdzieś średnika
0

To też daje błędy:

Kopiuj
import katalog1.plik1;
0

Nie, średniki są, to nie to...

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
0

w plik2 masz jak rozumiem package katalog2, a kompilacja odbywa się z folderu katalog1?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

Ok, podam więcej szczegółów, bo może to nie zależy od tego (?)

Mam interfejs w *.idl:

Kopiuj
interface Class1;

interface Class2
{
    typedef sequence<Class1> vector;
    Class2 create();
};

interface Class1
{
    typedef sequence<Class2> vector;
    Class1 create();
};

Kompiluję go tak:

idlj -fclient interface.idl

To daje mi pliki:

Class1Helper.java Class2.java interface.idl
Class1Holder.java _Class1Stub.java Class2Operations.java
Class1.java Class2Helper.java
Class1Operations.java Class2Holder.java _Class2Stub.java

i katalogi:

Class1Package Class2Package

w katalogu Class1Package są takie wygenerowane pliki:

vectorHelper.java vectorHolder.java

w katalogu Class2Package są takie wygenerowane pliki:

vectorHelper.java vectorHolder.java

wchodzę do katalogu Class1Package i wpisuję "javac *.java", i dostaję błędy:

vectorHelper.java:3: '.' expected import Class2; vectorHelper.java:3: ';' expected import Class2; vectorHelper.java:4: class, interface, or enum expected import Class2Helper; vectorHolder.java:3: '.' expected import Class2; vectorHolder.java:3: ';' expected import Class2; 5 errors Class1Package$ javac *.java vectorHelper.java:3: '.' expected import Class2; vectorHelper.java:3: ';' expected import Class2; vectorHelper.java:4: class, interface, or enum expected import Class2Helper; vectorHolder.java:3: '.' expected import Class2; vectorHolder.java:3: ';' expected import Class2; 5 errors

To mój cały projekt:

http://www41.zippyshare.com/v/32339153/file.html

0

Nikt nie wie?

iooi
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 11 lat
  • Postów:573
0
Kopiuj
import Class1;

To jest źle.
Problem w tym, że w Javie nie da się importować z domyślnego pakietu.
Musisz zmusić toto, żeby ci te pliki generowało w jakimś konkretnym pakiecie.

edytowany 3x, ostatnio: iooi
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Kompilator idlj ma opcję -pkgPrefix, która umieszcza klasy we wskazanym pakiecie.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

@bogdans: Co do tej opcji - próbowałem, i nie działa:/ a przynajmniej nie tak, jak bym tego chciał. Muszę mieć wszystko w module (a nie mogę w tym przypadku używać modułów), poza tym, nie mogę tego zrobić, jeśli mam zdef 2 interfejsy w 1 pliku, a muszę tak mieć, bo inaczej idlj krzyczy, że nie zdef wcale tego drugiego interfejsu, chociaż go zdefiniowałem, chyba idlj nie uznaje deklaracji zapowiadających ... masakra jakaś.

@iooi: Próbowałem ręcznie wsadzić toto do jakiegoś katalogu, i wkleić tam ręcznie klasy, ale doopa, bo i tak "nie działa"

Ktoś jeszcze się wypowie?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Nie wystarczy wsadzić ręcznie do katalogu, trzeba dopisać instrukcję package....


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

Aż takim idiotą nie jestem :] pisałem, że dopisałem do każdego pliku "package", ale dalej nic

0

@bogdans: Zobacz, może jestem jednak idiotą, i czegoś nie widzę: http://www10.zippyshare.com/v/84690665/file.html,

przy kompilacji w pakiecie Class1Package, mam błędy:

vectorHelper.java:3: package DefaultPack does not exist
import DefaultPack.Class2;
^
vectorHelper.java:4: package DefaultPack does not exist
import DefaultPack.Class2Helper;
^
vectorHelper.java:17: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHelper
public static void insert (org.omg.CORBA.Any a, Class2[] that)
^
vectorHelper.java:25: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHelper
public static Class2[] extract (org.omg.CORBA.Any a)
^
vectorHelper.java:47: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHelper
public static Class2[] read (org.omg.CORBA.portable.InputStream istream)
^
vectorHelper.java:57: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHelper
public static void write (org.omg.CORBA.portable.OutputStream ostream, Class2[] value)
^
vectorHolder.java:3: package DefaultPack does not exist
import DefaultPack.Class2;
^
vectorHolder.java:14: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHolder
public Class2 value[] = null;
^
vectorHolder.java:20: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHolder
public vectorHolder (Class2[] initialValue)
^
vectorHelper.java:35: cannot find symbol
symbol : variable Class2Helper
location: class Class1Package.vectorHelper
__typeCode = Class2Helper.type ();
^
vectorHelper.java:49: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHelper
Class2 value[] = null;
^
vectorHelper.java:51: cannot find symbol
symbol : class Class2
location: class Class1Package.vectorHelper
value = new Class2[_len0];
^
vectorHelper.java:53: cannot find symbol
symbol : variable Class2Helper
location: class Class1Package.vectorHelper
value[_o1] = Class2Helper.read (istream);
^
vectorHelper.java:61: cannot find symbol
symbol : variable Class2Helper
location: class Class1Package.vectorHelper
Class2Helper.write (ostream, value[_i0]);
^
14 errors

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Ja nie widzę w katalogu Class1Package pakietu DefaultPack. Masz co najmniej dwa wyjścia:

  • skopiować katalog DefaultPackage do Class1Package,
  • kompilować tak: *javac -cp .. .java.

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

@bogdans: dziękuję, jednak jestem idiotą Xd ale to nic, najważniejsze, że dało radę. Dziękuję,bardzo mi pomogłeś!:)

0

@bogdans: mam jeszcze jedno pytanie.

Mam drzewo katalogów:

  • kat1
    • kat2
      • kat3
      • kat4

jestem aktualnie w katalogu kat1, a chcę skompilować pliki w katalogach kat3 oraz kat4 z tym, że one w swoim argumencie dla -cp korzystają z plików w katalogu kat2 jak to zrobić? Zaznaczam, że nie mogę inaczej zorganizować układu katalogów.

Próbowałem:

javac -cp kat2/ kat2/kat3/*.java
, ale mam błędy jak poprzednio. Da się?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Za cp możesz podać listę katalogów oddzielonych średnikami
javac -cp kat2;kat2/kat3;kat2/kat4;


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
0

@bogdans: tzn nie wiem, czy mnie dobrze zrozumiałeś. Gdybym był w katalogu kat3 wydałbym polecenie:

javac -cp .. *.java

bo Twoje polecenie daje mi znów te same błędy. A mi chodzi o wydanie polecenia adekwatnego, tylko w katalogu kat1

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Czytałem po łebkach, powinno działać takie polecenie javac kat2/kat3/*.java, analogicznie dla kat4. (Zakładam, że w klasach z katalogów kat3 i kat4 masz import pakietu kat2.)


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

@bogdans: dziękuję.

Jeszcze jedno i już Cię nie męczę, jeśli byś mógł pomóc.

Jeśli mam takie drzewo katalogów:

  • kat1
    • kat2
    • kat3
    • kat4

Będąc w katalogu kat2 (lub kat3 lub kat4) musiałbym wydać polecenie: *javac -cp .. .java, a co zrobić, jeśli jestem w katalogu kat1 i chcę zrobić to samo (importy wszystkie mam)?

0

Ok, juz się nie kłopocz ;) - wystarczyło dać:

javac kat2/*.java

dziękuję ślicznie

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

javac kat3/*.java
//edit, spóźniłem się ;)


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
0

A jednak, znów problem - tym razem z uruchomieniem programu, który napisałem (z kompilacją na szczęście już wszystko ok).

Mam katalogi:

  • client
    • interfaces/InterfacePackage/ -----> duużo plików, w tym AppInterfaceHelper.java i AppInterfaceHelper.class
    • implementations/client.java

chcę uruchomić klienta (client.java, gdzie klient ma import: import InterfacePackage.*; ) o, tak (jestem w katalogu implementations):

Kopiuj
java client -ORBInitRef NameService=corbaloc::localhost:2809/NameService

ale dostaję błędy:

Exception in thread "main" java.lang.NoClassDefFoundError: InterfacePackage/AppInterfaceHelper
at Client.main(Client.java:34)
Caused by: java.lang.ClassNotFoundException: InterfacePackage.AppInterfaceHelper
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 1 more

coś mi się zdaje, że to dlatego, że klient nie widzi pliku "AppInterfaceHelper" ... jak mogę inaczej uruchomić klienta, żeby zadziałał?

0

@bogdans: szukając w google odpowiedzi/pomocy natknąłem się na Twój post: Java szukanie wartosci w kolumnie (ostatni post na tej stronie) który bardzo mi pomógł, klient się uruchomił, skopiowałem katalog **interfaces/InterfacePackage/ ** do katalogu implementations i śmiga.

Wszystko wspaniale, ale czy nie można tego zrobić tak, jak chciałem? Jest to możliwe? Jest na to jakiś sposób? Dzięki ;)

0

Wie ktoś? ^^ cały dzień się z tym męczę i nic

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Polecenie java też ma parametr -cp. Możesz podać listę katalogów (plików jar), w których JVM ma szukać klas.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

@bogdans: No właśnie próbowałem (znalazłem w dokumentacji), coś takiego:

Kopiuj
java -cp ../Interfaces/ Client -ORBInitRef NameService=corbaloc::localhost:2809/NameService

ale dostaję:

Exception in thread "main" java.lang.NoClassDefFoundError: Client
Caused by: java.lang.ClassNotFoundException: Client
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Client. Program will exit.

  1. Natomiast to:
Kopiuj
java -cp ../Interfaces/;. Client -ORBInitRef NameService=corbaloc::localhost:2809/NameService

daje mi:

Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-client to select the "client" VM
-server to select the "server" VM
-jamvm to select the "jamvm" VM
-cacao to select the "cacao" VM
-zero to select the "zero" VM
-hotspot is a synonym for the "client" VM [deprecated]
The default VM is server,
because you are running on a server-class machine.

-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
              A : separated list of directories, JAR archives,
              and ZIP archives to search for class files.
-D<name>=<value>
              set a system property
-verbose[:class|gc|jni]
              enable verbose output
-version      print product version and exit
-version:<value>
              require the specified version to run
-showversion  print product version and continue
-jre-restrict-search | -jre-no-restrict-search
              include/exclude user private JREs in the version search
-? -help      print this help message
-X            print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
              enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
              disable assertions with specified granularity
-esa | -enablesystemassertions
              enable system assertions
-dsa | -disablesystemassertions
              disable system assertions
-agentlib:<libname>[=<options>]
              load native agent library <libname>, e.g. -agentlib:hprof
              see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
              load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
              load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
              show splash screen with specified image

See http://java.sun.com/javase/reference for more details.
bash: Client: Nie ma takiego pliku ani katalogu

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Linux? Separatorem katalogów w parametrze cp jest przecinek, nie średnik.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

@bogdans: dziekuję, już próbuję:) Tak, zapomniałem napisać; Kubuntu 12.04.

Próbowałem:

Kopiuj
java -cp ../Interfaces/,./ Client -ORBInitRef NameService=corbaloc::localhost:2809/NameService

daje:

Exception in thread "main" java.lang.NoClassDefFoundError: Client
Caused by: java.lang.ClassNotFoundException: Client
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Client. Program will exit.

Kopiuj
java -cp ./,../Interfaces/ Client -ORBInitRef NameService=corbaloc::localhost:2809/NameService

ten sam błąd, jak wyżej

Kopiuj
java -cp .,../Interfaces Client -ORBInitRef NameService=corbaloc::localhost:2809/NameService

także błąd jak wyżej :(

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Czasami piszesz client, czasami Client, czasami interfaces, czasami Interfaces. Ty masz świadomość, że Linux i Java są case-sensitive? ;)


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

@bogdans: Tak wiem, trochę namieszałem. Ale u siebie na dysku mam wszystko z dużej litery, tylko na forum pisałem różnie, nie chciałem wprowadzać w błąd, przepraszam. Mimo tego, że z dużej litery wszystko i nawet w kliencie (Client.java) mam :

Kopiuj
public class Client {//..}

i już sam nie wiem, czemu "nie działa" :(

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)