Блог пользователя pcms-quesiton

Автор pcms-quesiton, 16 лет назад, По-русски
Доброго времени суток!

Я пытаюсь настроить систему pcms2, но не могу обойти такую ошибку:

ERR    compiler            - Thread compiler.1.CompilerThread-0 thrown exception. Restarting
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at pcms2.invoke.ni.java.InvokeJava.invoke(InvokeJava.java:50)
at pcms2.judging.invoke.VirtualInvoke.invoke(VirtualInvoke.java:316)
at pcms2.judging.compiler.Language.compile(Language.java:360)
at pcms2.judging.compiler.CompilerCompilerThread.processRequest(Compiler.java: 269)
atpcms2.judging.compiler.Compiler
CompilerThread.run(Compiler.java:221)
at pcms2.shell.impl.ThreadManagerLocalThread.run(ThreadManager.java: 316)    


Проще говоря, при посылке решения в систему падает компонента Compiler.       
Встречал ли кто-нибудь такой баг? Как с ним бороться? Можете ли вы выложить рабочую версию pcms2?
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Я боюсь что это вопрос не на том ресурсе. Насколько я знаю, авторы pcms2 из Санкт-Петербургского государственного университета информационных технологий, механики и оптики. Можете поискать faq или что-то в этом роде на neerc.ifmo.ru/trains
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

А где собственно сообщение об ошибке? Нужно справа выбрать компоненту Compiler, тогда в окне слева можно будет увидеть ее лог.

а в общем...

Я такие вопросы решал следующим образом. Достал из разных мест зоопарк разных версий PCMS2, в каждой из которых что-то одно не работает. Если в каком-то модуле происходит ошибка, jar заменяется аналогом из другой версии.

ну и еще, на всякий случай, ntinvoke.dll должен лежать в PATH


16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Какие настройки компилятора? (XML-файлы compiler.xml, virtual-invoke.xml)
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
1. Java так компилять нехорошо, вложенные классы будут плохо работать. Но сейчас не об этом.

2. Из командной строки вышеозначенные компиляторы запускаются?

3. Есть файлы native-invoke-java.xml и native-invoke-nt.xml. Первый должен быть start="never", второй start="always". Первый, сдается мне, уже давно не работает.

4. До попытки сабмита все в сервере "живет"?
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Поясняю. native-invoke-java - это "затычка", которая запускает программы с помощью Runtime.getRuntime().<и-так-далее>. Она была deprecated с самого начала, а сейчас и вовсе не работает. Надо пользоваться native-invoke-nt (разумеется, под виндами), она делает то же самое, что и всем известный run, и через ту же библиотеку invoke.dll.
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      1. А как хорошо? Я ничего не менял кроме gpp -> g++.
      2. Да, запускаются.
      3. Если поставить в native-invoke-nt.xml start = "always", а в ...-java start="never", то получается баг    Component's class is not specified.
      4. Да, всё живёт.
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Component's class is not specified - это симптом того, что invoke.dll не находится. Положите его в system32, или укажите на директорию, в которой он лежит, с помощью опции командной строки java -Djava.library.path=<директория> при запуске сервера (в pcms2.bat).
        • 13 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          делал так. java -D java.library.path=invoke.dll потом так java -D java.library.path=c:\windows\system32\invoke.dll Не работает! Error: Could not find or load main class java.library.path=invoke.dll

          • 13 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

            В -Djava.library.path надо указывать путь к директории с invoke.dll, а не к самой invoke.dll.

            Между -D и java.library.path пробелов быть не должно.

            И это дополнительная опция командной строки java, а не вся командная строка. Имелось в виду то, что в pcms2.bat надо найти вызов java и дописать туда опцию про java.library.path.

            • 13 лет назад, скрыть # ^ |
              Rev. 4  
              Проголосовать: нравится 0 Проголосовать: не нравится

              Вот так? Я ничего не перепутал?

              java -Djava.library.path="c:\windows\sytem32\"

              • 13 лет назад, скрыть # ^ |
                Rev. 2  
                Проголосовать: нравится 0 Проголосовать: не нравится

                Если оно в C:\Windows\System32, то как раз в этом случае ничего писать не надо, так как эта директория и так будет просматриваться на предмет поиска библиотеки.

                Не знаю, как сейчас, у меня pcms2.bat имеет следующее содержание:

                cd ..
                
                call bin\runjava.bat pcms2.shell.Main bin\shell.properties
                
                cd bin
                

                Вот после bin\runjava.bat можно писать -Djava.library.path=...

                Можно еще подкорректировать runjava.bat. Там тогда будет такая строчка:

                "%JAVA_HOME%\bin\java.exe" -Djava.library.path=.\lib -showversion -Xms128M -Xmx1024M -Xbootclasspath/a:%PCMS2_BOOTCP% %PCMS2_ARGS%
                

                Обращаю внимание на то, что при просмотре приведенных примеров файлов на codeforces могут случиться непредвиденные и некорректные переносы строк.

      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Как компилять java, расскажу, когда остальное запустим.