2015-10-16 2 views
0

У меня есть приложение GUI с меню, элементами, ярлыками и так далее. Их видимое имя содержит символы Unicode. Теперь мне нужно отобразить это приложение правильно, с символами Unicode. Если я запускаю jar, java использует системную кодировку по умолчанию, которая не является unicode. Я могу исправить эту проблему, добавив аргумент -Dfile.encoding = UTF-8 в командную строку с -jar <app.jar>. Но скажем, я хочу дать банку кому-то, и для него может быть немым открыть CMD и передать некоторые аргументы в java. Actualy, java vm - это программа, в которой аргументы запуска делают большие вещи. Приложения Java работают в java vm. Поскольку manifest.mf переходит к аргументу jvm о пути к основному методу программы, который он будет запущен, почему у нас нет, например, функции в файле manifest.mf, массива аргументов, которые будут использоваться в jvm, когда запуск приложения. Я знаю, что java больше используется для создания полезных функций, а для графических приложений - C, но java - отличный язык, за исключением некоторых недостатков виртуальной машины. У меня была идея моей основной программы, что она откроет новый java vm с соответствующими аргументами и запустит приложение там. Тогда убей себя. Я также знаю об обертке jar для exe, поэтому exe-файл будет запускать jvm и app, но тогда я потеряю многоплатформенную компактность. Спасибо за ответы. Надеюсь, я не писал здесь бесполезно.Возможно ли запустить приложение, закодированное в unicode без терминала?

+0

«для графического интерфейса приложений есть C» -большой LOL. Но серьезно, вы должны прочитать имя свойства 'file.encoding' и прочитать его снова и снова, думая о том, что он пытается сказать вам. После того, как вы прочитали имя медленно несколько раз, неужели вы все еще удивляете вас, когда я говорю вам, что он ничего не делает с графическим интерфейсом? – Holger

+0

Да, я понимаю. Я просто хочу сказать, написав приложение на C, я бы получил полный контроль над своей программой, и виртуальная машина не ограничивала бы меня. И я думаю, что если бы у меня было приложение CLI, я должен определить свой собственный поток и кодировку. Но как это сделать с графическим интерфейсом, где я использую некоторые библиотеки. –

+0

Кажется, вы все еще не понимаете. Нет никаких оснований для kludge с этим свойством; это совершенно не относится к приложениям с графическим интерфейсом. Библиотеки GUI используют unicode. Единственное место, где это имеет значение, это (файл) ввода/вывода *, если вы не указали кодировку * в своем коде. Нет функции, которая заставляет вас использовать стандартную кодировку системы, для каждой функции, которая имеет дело с этой кодировкой по умолчанию, есть альтернатива, которая принимает параметр кодирования как параметр. Если ваше приложение не хочет использовать кодировку по умолчанию, это не обязательно. Ваша проблема заключается не в том, что у вас есть графический интерфейс. – Holger

ответ

0

Несколько вопросов здесь, но позвольте мне дать вам общее руководство:

  1. Когда пакет JAR, метаданные в файле JAR, такие как имена входа, комментарии и содержание манифеста , должен быть закодирован в UTF8 (выполняется для ярлыков и т. д.). Это справедливо независимо от того, упакован ли JAR с помощью утилит командной строки или некоторой среды IDE. Поэтому прежде всего проверьте, что ваши файлы с метками и т. Д. Кодируются UTF8.

  2. Возможно, что ваша собственная ОС имеет настройку, отличную от юникода. Поэтому, когда вы редактируете и сохраняете файл .properties (или что-то еще) с ярлыками, они фактически не сохраняются в UTF8.

  3. Если вы упаковываете «запускаемый» JAR, он должен работать с UTF-8, если у вас есть метки UTF-8 внутри JAR.

Примите взгляд на этот вопрос также: How to Force a jar to uses(or the jvm runs in) utf-8 instead of the system's default encoding

+1

Файлы свойств хранятся с использованием 'ISO Latin-1' aka' ISO 8859-1', см. ['Properties.load'] (http://docs.oracle.com/javase/8/docs/api/java/util /Properties.html#load-java.io.InputStream-)... – Holger

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