2010-10-08 7 views
8

Моя программа Java находится в рабочем состоянии, когда я использую ее под Windows (Eclipse и Bluej). Я сжимаю его к банке и отправляю ее в свою красную шляпу и удар. ничего не работает. Он разбивается о самых странных вещах, таких как текстовый текст, который не будет отображаться, JPasswordfield просто исчезнет, ​​Java AWT ROBOT тоже умирает ... список продолжается, сначала я думал, что это должен быть мой Linux JRE устарел, но я установлена ​​последняя JRE, а затем JDK без каких-либо улучшений. У меня такое чувство, что я пропустил понимание способности Java cross plat. Я также попытался удалить все мои функции и кишки, чтобы увидеть, что ломается, но кажется, что каждая вторая вещь ломается, кроме некоторых основных компонентов графического интерфейса пользователя и большинства компонентов задней части. в основном любая вещь, которая использует какую-то фантазию, будет взорваться на моем лице, например, сделать текстовое поле в поле пароля ...Будет ли Java, скомпилированная в Windows, работать в Linux?

Это мое первое сообщение;) пожалуйста, будьте любезны новичкам!

Спасибо !!!

РЕШЕННЫЙ !!! Yay. Задача решена!!! Это связано с тем, что мой Java-путь не установлен, поэтому мой GCC/GCJ прыгнул вместо моей версии oracle java, даже если я использовал java -jar xxx.jar. поэтому я ввел путь к каталогу java из моего java -jar xxx.jar и работал как шарм. если вы не установите путь, вы должны сделать это вручную

/usr/java/jdk1.6.0_21/jre/bin/java -jar xxxxx.jar

Java -version, чтобы проверить, если ваш реальный Java работает или если он еще GCJ

+0

Это кросс-платформенный (например, вам не нужно перекомпилировать JAR), но есть еще некоторые причуды, поэтому вам нужно позаботиться. Вы должны опубликовать относительно небольшую программу, которая показывает проблемы в Linux. –

+0

Мой опыт работы в 1.4 заключался в том, что SWING на самом деле не был переносимым, но с тех пор я не могу говорить о версиях. AWT был немного безопаснее ... –

+2

@OMG: Swing очень портативен. Проблемы, с которыми люди (как в элементах управления, не выстраиваются правильно), имеют больше общего с программистами, не использующими макеты должным образом. –

ответ

11

Пользователи Linux часто запускают java-программы с gcj вместо java. Убедитесь, что вы используете правильный исполняемый файл.

+0

oh Я фактически использую gcj -jar xxx для запуска моего Jar – JavaLu

+1

@JavaLu: Я думаю, что это ваша проблема прямо там. В Linux вы должны использовать OpenJDK или Sun Java. –

+0

Да, это ответ. Спасибо, парни!!!! – JavaLu

4

Да. Форматы класса и jar преднамеренно кроссплатформенны.

Вы уверены, что ваш файл jar был скопирован правильно на вашу Linux-машину? Если вы использовали ftp, крайне важно использовать двоичный код вместо переноса ascii.

+1

Если это была проблема с бинарником/ascii, файл .jar даже не мог быть прочитан как действительный. Ничего не получилось бы. –

+0

Я использовал полный командир для FTP, я не могу проверить прямо сейчас, поскольку я ушел из своей коробки. не знаю, был ли это ftp или ascii, но я попробую использовать свою Mem stick. – JavaLu

+0

Это зависит от шаблонов бит, присутствующих в переданном файле. –

3

Является ли ваше приложение зависимым от любых внешних библиотек, которые вам также необходимо иметь на вашей Linux-машине?

+1

Если это была проблема, то ClassDefNotFoundExceptions будут выбрасываться повсюду. –

+0

Правда, но нам не так много, чтобы идти дальше, чем расплывчатый «он сломан». – Dave

+0

er, я вдали от своей коробки, поэтому я не могу вспомнить все ошибки. Я помню один из них tho: java.lang.error: не реализован. жаль, что я не готов, я ожидал за 5 часов до первого ответа и менее интенсивный. – JavaLu

1

Вы используете KDE? Какая тема? Вчера у меня был вопрос, что в теме «Cleanlooks» есть много ошибок, отображающих виджеты. Попробуйте «Кислород».

Если вы можете, попробуйте код в другом ящике Linux (возможно, он имеет аппаратный дефект). Запустите «memtest» (должен быть вариант в загрузчике или на вашем аварийном компакт-диске).

2

Java говорит: «Напишите один раз, запустите где-нибудь».

+1

Когда дело доходит до Swing, это на самом деле больше похоже на «Пишите один раз, проверяйте везде» – finalman

+0

* Напиши один раз, бегите куда угодно *, на самом деле более верно для C, чем для Java. Предполагается, что Java будет ** компилировать ** * один раз, запускать в любом месте, где есть JVM *. –

+1

Обратите внимание, что WORA не применяется к встроенным методам/libs. –

1

Качели должны быть полностью переносимыми. Попробуйте использовать металлический внешний вид, который широко поддерживается. У меня есть сомнения относительно java.awt.Robot, хотя и не было бы удивлено, если бы это было источником ваших проблем.

1

У меня есть приложение Swing, которое я распространяю через Java Web Start, которое я не обновлял с 2004 года, которое, как я знаю, все еще отлично работает в Mac OS X, Windows и Linux. Я запустил его только на днях, потому что кто-то отправил мне по электронной почте вопрос об этом. Он был первоначально написан на Windows, но никогда не показывал никаких проблем в других операционных системах или даже в гораздо более поздних версиях Java.

JVM представляет собой очень ровное игровое поле на широком спектре платформ, и Java API хорошо реализован, чтобы работать одинаково и предлагать ту же функциональность. Моя ставка заключается в том, что вы обнаружите, что эта проблема является чем-то совершенно не связанным с вашим кодом Java.В дополнение к предложению попробовать ваше приложение на другом компьютере, работающем с той же ОС, обязательно попробуйте приложения других людей Java, работающие на том, что создает проблемы. Попробуйте мой собственный HotSheet: http://www.johnmunsch.com/projects/HotSheet/ или такую ​​игру, как Legerdemain: http://roguelikefiction.com/?page_id=6, чтобы посмотреть, будут ли они работать.

5

Проверьте, что вы используете JRE Sun (Oracle) JRE на вашей машине Linux, а не какую-то стороннюю реализацию Java, такую ​​как gcj или подобные.

По моему опыту, приложения Java довольно портативны, если вы придерживаетесь одного и того же поставщика JVM/runtime на каждой целевой SO, но реализации Java от разных поставщиков могут вести себя отличным друг от друга.

+0

Я вижу, я использую gcj для запуска моего Jar. У меня установлен oracle jre, но не уверен, что команда запускать банку. – JavaLu

+0

'java -jar JarName' :-) – Grodriguez

+0

Кстати, вы можете использовать' which java', чтобы узнать, какая команда java действительно вызывается. – Grodriguez

0

Java очень переносимый. Скорее всего, ваша виртуальная машина отличается. Хотя виртуальные машины с открытым исходным кодом становятся очень хорошими, я рекомендую попробовать с помощью виртуальной машины Sun. У меня никогда не было проблемы с ее запуском какого-либо кода.

Кроме того, если вы используете какую-либо библиотеку с компонентами машинного языка, те должны быть разными (я заметил это с некоторыми графическими библиотеками, которые требуют до 3d подсистемы платформы)

Но сам Java ВОЛИ легко переносится в любую систему, имеющую те же библиотеки и хорошую виртуальную машину. Очень хорошо - я делаю это все время и делаю это в течение десяти лет и буквально никогда не испытывал проблем. Это работает с клиентскими/серверными системами, где клиенты и сервер находятся на разных платформах, ПК/Mac & Unix и даже встроенные системы - просто порты.

Теперь апплеты, запущенные в разных браузерах, или визуально пытаются совместить шрифты с машинами, которые не содержат одного и того же шрифта. Ничто вам не поможет.

1

В Linux это может иметь решающее значение для использования Sun JDK/JRE и не OpenJDK, который является реализацией официальной Sun Java JDK. Так может быть и это, хотя и не совсем.

Смежные вопросы