Наконец, я нашел ответ, добавив следующий код
оператор импорта в MainApplication.java
:
import com.facebook.react.BuildConfig;
Нашел ответ по следующей ссылке
React Native Ошибка сборки Android MainActivity.java:29: ошибка: не удается найти символ
Наиболее распространенный шаблон для того, чтобы сделать это должен использовать Шаблон "одиночка". Поскольку Вы не указали на язык, я собираюсь предположить, что Вы обращаетесь к C# здесь - в противном случае, принципы являются все еще тем же на большинстве языков OO.
Эта статья должна дать Вам некоторую справку.
Это - что-то, что я использовал... (C# на.NET 2.0)
[STAThread]
private static void Main(string[] args)
{
//this follows best practices on
//ensuring that this is a single instance app.
string mutexName = "e50cf829-f6b9-471e-8d9f-67eac3699f09";
bool grantedOwnership;
//we prefix the mutexName with "Local\\" to allow this to run under terminal services.
//The "Local\\" prefix forces this into local user space.
//If we want to forbid this in TS, use the "Global\\" prefix.
Mutex singleInstanceMutex = new Mutex(true, "Global\\" + mutexName, out grantedOwnership);
try
{
if (!grantedOwnership)
{
MessageBox.Show("Error: X is already running.\n\nYou can only run one copy of X at a time.", "X", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
Application.Exit();
}
else
{
Application.Run(new X(args));
}
}
finally
{
singleInstanceMutex.Close();
}
}
В.NET VB существует булево свойство IsSingleInstance, которое делает задание для Вас.
В VB (взятый отсюда):
Public Class Program
Inherits Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
Public Sub New()
Me.IsSingleInstance = True
End Sub
End Class
Вот то, как Вы используете его в C# (взятый отсюда):
// SingleInstanceApplication.cs
class SingleInstanceApplication : WindowsFormsApplicationBase {
// Must call base constructor to ensure correct initial
// WindowsFormsApplicationBase configuration
public SingleInstanceApplication() {
// This ensures the underlying single-SDI framework is employed,
// and OnStartupNextInstance is fired
this.IsSingleInstance = true;
}
}
// Program.cs
static class Program {
[STAThread]
static void Main(string[] args) {
Application.EnableVisualStyles();
SingleInstanceApplication application =
new SingleInstanceApplication();
application.Run(args);
}
}
Удостоверьтесь, что сослались на Microsoft.VisualBasic.dll в своем проекте.
Откройте свои Свойства проекта (Вкладка Приложения) и проверьте Делание единственного параметра приложения экземпляра.
От вкладки Application можно также нажать кнопку View Application Events, для создания класса ApplicationEvents.vb, где можно обработать второе событие экземпляра:
Partial Friend Class MyApplication
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
' Bring First Instance to Foreground
e.BringToForeground = True
' Pass Second Instance Command Line to First Instance
AppShared.DoSomethingWithCommandLine(e.CommandLine)
End Sub
End Class
В VB.NET единственное приложение экземпляра является просто флажком на странице Свойства проекта. Можно также захватить Мой. Приложение. Событие StartupNextInstance, чтобы иметь Ваш единственный экземпляр делает что-то, когда другая копия запускается. Это может использоваться, например, для MDI как поведение открытия требуемого документа в исходном экземпляре.
Негласно, это инкапсулирует хороший бит взаимного исключения, и липкая вещь IPC - видят WindowsFormApplicationBase - и может использоваться от C# также.
У Scott Hanselman есть хорошая статья об этом. Код находится в C#, но я предполагаю, что будет легко портировать его на VB.
Вот еще одна статья о теме в случае, если это не удовлетворит Ваши потребности:
Использовать Mutex
. Эффективно, a Mutex
может быть назван со строкой и уникален через CLR.
Пример кода:
try
{
mutex = Mutex.OpenExisting(mutexName);
//since it hasn’t thrown an exception, then we already have one copy of the app open.
MessageBox.Show(”A copy of Todo 3.0 is already open. Please check your system tray (notification area).”,
“Todo 3.0″, MessageBoxButtons.OK, MessageBoxIcon.Information);
Environment.Exit(0);
}
catch (Exception Ex)
{
//since we didn’t find a mutex with that name, create one
Debug.WriteLine(”Exception thrown:” + Ex.Message + ” Creating a new mutex…”);
mutex = new Mutex(true, mutexName);
}
Из этого сообщения:
Если Ваше приложение находится в VB.NET 2.0-3.5, самый легкий способ поддерживать единственный экземпляр в рабочем состоянии программы при помощи 'Свойств Платформы Приложения Windows'. Для получения там щелкните правой кнопкой по названию проекта и перейдите к 'Свойствам'. Однажды там, установите флажок 'Make single instance appliation'.
Можно также использовать ApplicationEvents.vb, чтобы показать пользователю, что они запустили программу во второй раз. Можно создать/просмотреть это легко в том же окне свойств путем нажимания кнопки 'View Application Events'. В там, можно выбрать MyApplication_StartupNextInstance sub и войти в код там, как это:
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
MessageBox.Show("This program is already running. If you do not see the program running, please check your " _
& "Windows Task Manager for this program name in the 'Processes' Tab." & vbNewLine & vbNewLine & "WARNING: " _
& " If you terminate the process, you will terminate the only instance of this program!", My.Application.Info.ProductName.ToString _
& " is Running!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End Sub
Сообщите мне, помогает ли это! JFV
Присвойте Вашему приложению некоторый уникальный идентификатор, такой как hardcoded гуид и создайте Взаимоисключающий экземпляр, где Вы присваиваете взаимное исключение это тот идентификатор. Если это выдает исключение затем, если средства, которые уже выполняет Ваше приложение (поскольку этому успешно удалось создать взаимное исключение),
Я думал, что будет легче иметь образец прямо здесь вместо ссылки.
[STAThread]
static void Main()
{
if (!IsAppAlreadyRunning())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1()); /* Change Form1 for your main Form */
}
else
{
MessageBox.Show("Application is already running!");
}
}
public static bool IsAppAlreadyRunning()
{
Process currentProcess = Process.GetCurrentProcess();
return (IsAppAlreadyRunning(currentProcess.Id,
currentProcess.ProcessName));
}
private static bool IsAppAlreadyRunning(int ID, string Name)
{
bool isAlreadyRunning = false;
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
if (ID != process.Id)
{
if (Name == process.ProcessName)
{
isAlreadyRunning = true;
break;
}
}
}
return isAlreadyRunning;
}