Чтобы прорваться к Петербургу с моря, Густаву нужно было разбить Балтийский флот и взять Кронштадт. Выйти же к российской
столице с суши мешали Нейшлот и Выборг. Нейшлот оказался ключевой позицией: он был расположен в центре водной системы Сайменского озера и заграждал шведам путь на юг — на Выборг.
Но в Финляндии Густав увяз в позиционных боях, а на море шведы потерпели победу по очкам в Готландском сражении. В войну со Швецией вступила и Дания, старая союзница Петербурга, однако вскоре в резиденцию датского короля в Копенгагене явился прусский посланник Адриан фон Борк, который заявил, что в случае возобновления Данией боевых действий против Швеции прусская армия займет датский Шлезвиг-Гольштейн. В результате напуганные датчане вышли из войны.
Зимой 1788/89 годов шведы попытались с помощью диверсионной группы проникнуть на рейд Копенгагена и взорвать там русские корабли эскадры Виллима Фондезина (100-пушечные корабли «Иоанн Креститель», «Три Иерарха» и «Саратов», 74-пушечные корабли «Александр Невский», «Максим Исповедник», «Пантелеймон» и «Мечеслав», 66-пушечные корабли «Северный Орел» и «Прохор», а также 32-пушечный фрегат «Надежда» и 44/38-пушечные фрегаты «Архангел Гавриил» и «Помощный»). Эту попытку пресекли датчане. На южном входе они поставили четыре старых корабля, негодных к плаванию в открытом море, и расположили там свои дозоры, которые заметили шведские брандеры и захватили их до того, как шведы смогли сблизиться и поджечь русские линкоры. Этот инцидент вызвал взрыв возмущения в Дании, и война ее со Швецией чуть не вспыхнула с новой силой. Спас шведов только ультиматум Пруссии, которая предупредила, что с возобновлением военных действий тотчас же вторгнется в Шлезвиг-Гольштейн. Под жесточайшим давлением Пруссии и Англии Дания 9 июля 1789 года подписала декларацию о нейтралитете, то есть обязалась не вмешиваться в войну Швеции и России ни на какой стороне.
Екатерина сделала сильный ход зимой 1789 года. Было заключено два очень важных договора — с Францией и Испанией, в дополнение к оборонительному договору с Австрией. Смысл их состоял в следующем: в случае нападения на какую-либо из четырех стран (то есть Россию, Францию, Испанию или Австрию) три другие страны обязывались также вступить в войну с агрессором в течение месяца и выставить в поле по 60 тысяч человек, а в море вывести по 12 линкоров и восемь фрегатов. Отдельно оговаривался вклад Австрии, которая не имела значимого флота, помимо небольших крейсерских соединений в Остенде и Триесте. Она должна была выделить деньги одной из воюющих держав на вооружение, снабжение и комплектование 12 кораблей и восьми фрегатов. Этот договор не касался уже идущих войн с Турцией и Швецией и ненавязчиво указывал на возможную агрессию Англии и Пруссии. Таким образом, Пруссия, реши она все-таки атаковать Россию, оказывалась перед перспективой войны на два фронта, причем франко-испано-австрийские войска составили бы 180-тысячный контингент — неплохая прибавка к русским 80 тысячам на польской границе!
Аналогично и Англия, вздумай она поддержать своим флотом Швецию, оказывалась бы вынужденной воевать не только с Балтийским флотом (26 линкоров), но и с флотом союзников (36 кораблей), а это очень значительная сила, особенно учитывая то, что французы, австрияки и испанцы не стали бы в этом случае лезть в Северную Атлантику или Северное море, а устроили бы небольшой Армагеддон средиземноморской британской торговле и Гибралтарской эскадре.
Естественно, что Екатерина «совершенно случайно» допустила утечку данных о договоре, и узнавший о новом союзе Питт хватал Фридриха-Вильгельма за фалды, упрашивая отказаться от замыслов вторжения в русскую Польшу и Прибалтику, а в свою очередь прусский король (также по своим каналам извещенный об этом альянсе) умолял Англию не вводить в Балтийское море свои корабли.
С помощью этого договора Екатерина добилась того, что со Швецией Россия разбиралась «один на один», без вмешательства иностранных держав. Однако во Франции было все плохо, начиналась Великая Французская революция. Летом 1789 года Париж погрузился в междоусобицу и практически устранился из большой политики.
Военные действия со Швецией были в целом удачными. Балтийский флот смог победить шведов при Эланде, в Финляндии продолжалась позиционная война, выгодная для русских, хотя ни одна из сторон не добилась решающей победы.
В 1790 году русские сначала отбились у Ревеля, а потом заблокировали шведский линейный и галерный флоты у Выборга. В Выборгском сражении 3 июля 1790 года шведский флот потерпел сокрушительное поражение и был заблокирован в Свеаборге. Престижной для шведов стала победа над русским галерным флотом при Роченсальме (9 июля 1790 года), но несчастный для Швеции ход войны она переломить не смогла. 14 августа 1790 года был подписан Верельский мирный договор.